Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

ㅂㄱ

훌륭한 알고리듬이 갖춰야 할 자질 본문

COMP3500/COMP 3500 알고리즘 및 자료구조 수업

훌륭한 알고리듬이 갖춰야 할 자질

쿠루쿠루티 2021. 4. 29. 10:50

1. 입력과 출력이 명확히 정의되어 있어야함 -> 입력은 시작시 비어있을 수도 있음

2. 알고리듬의 각 단계가 명확하며 모호하지 않아야 함

3. 유한 시간 안에 결과(출력)가 나와야 함

4. 컴퓨터 코드를 포함하면 안 됨 -> pope는 동의 안함 --> 포팅이 어려운 컴퓨터 코드를 포함하면 안 됨

5. 같은 문제를 푸는 다양한 방법 중에 가장 효율적임

 

 

컴퓨터 코드를 사용하면 생기는 문제

 

1. 이해가 어려울 수 있음 : 그 코드를 못 읽는 사람이 있을 수 있음

2. 포팅이 어려울 수 있음 : 특정 언어에만 있는 기능을 사용할때

 

  • 최종 목표 : 어떤 프로그래밍 언어로도 알고리듬을 구현할수 있어야 
  • 목표는 올바름 그러나 방법이 틀림

코드 없이 알고리듬을 설명하려면?

 

  • 인간의 언어로 표현해야 함
  •  

양자를 비교했을때 일반적으로 코드가 쉽게 읽힘

 

  • 모든 사람이 충분히 이해하는 인간 언어가 있어야만 가능한 일
  • - 기원이 같은 인간 언어들은 공통점이 꽤 있음
  • - 하지만 매우 상이한 언어도 있어서 이건 말이 안되는 이야기

 

 

코드가 차라리 더 낫다.

 

public int add(int num1, int num2){
	return num1 + num2;
}
  • 그 보다는 프로그래밍 언어들끼리는 공통정이 더 많음
  • - C계열 언어끼리는 매우 비슷
  • - 그 외 언어도 충분히 비슷
  • 따라서 차라리 코드로 설명하는게 더 좋은 방법
  • - 최종 목표는 이해입니다. 문법은 적당히 틀려도 됨(의사코드, pseudocode)

 

의사코드의 예 : FizzsBuzz

 

결과적으로 이해만 가면 된다.

 


포팅이 가능한 의사코드 작성하기

 

  • 거의 모든 언어에 공통되는 연산만 사용하기 - 사칙연산, 비트연산, 조건문 , 반복문 등
  • 결국 하드웨어와 기계어/ 어셈블리어 수준에서 지원하는 것들
  • 고수준 언어 중에서는 C에서 지원하는 것 정도(단, 포인터 연산은 제외)

왜 알고리듬 과목을 이리 뒤에 배우는지 알겠죠?

네 컴퓨터가 도는 방법을 잘 알아야 하니까요?

 

 

알고리듬 공부를 해도 안 느는 프로그래머들

 

  • 하드웨어가 어떤 연산을 지원하는지 모름
  • 이미 존재하는 마법 같은 함수만 호출해봄
  • 툭하면 언어 문법이 틀리는데 컴파일 오류를 봐도 그 문제를 못 참음
  • 컴퓨터에 데이터가 어떻게 저장되는지 모름
  • 힙과 스택 메모리의 차이에 대해 모름

알고리듬의 효율성

 

  • 자원의 효율적 사용을 뜻함
  • 자원(resource) - 시간(time) : cpu 속도 등, 공간/용량(space) : 메모리 사용량 등
  • 시간과 공간은 종종 상반 관계 -> 메모리를 좀도 먹으면 시간이 줄어들거나 한다. 
  • 자원을 많이 사용할수록 그 알고리듬이 복잡하다고 말함 - 시간 복잡도(time complexity), 공간복잡도(space complextiy), 알고리듬 복잡도를 표현하는 방법 중 하나 : 빅오(Big- O) 표기법

 

덜 효율적인 더하기 알고리듬

 

1. 변수 num1, num2, sum을 선언한다.

2. num1과 num2 용 값을 읽는다.

3. sum에 num1을 대입한다.

4. 총 num2번 동안 sum을 1씩 증가한다.

5. sum을 화면에 출력한다.

 

 

코드1은 무조건 1번에 실행으로 끝난다. 하지만 위 코드는 숫자가 증가하면 할 수록 코드 실행 횟수가 증가한다.

 

 


알고리듬의 효율성과 실제 성능

 

 

한번에 한명 밖에 컴퓨터가 못 센다면?

 

 

 

알고리듬의 효율성 분석은 다소 추상적

 

즉 어떤 컴퓨터에서 이 코드를 돌리나에 따라서 달라질수도 있다는 것이다.

 

 

 

Comments