알고리즘이란
어떤 문제를 해결하기 위한 논리나 절차를 말한다. 하나의 문제를 해결하기 위한 알고리즘의 형식은 다양하지만, 일반적으로 사람이 생각하는 알고리즘을 컴퓨터에 그대로 적용할 수 없다. 사람은 경험적 직감에 크게 의존하므로 이를 컴퓨터에서 실행하려면 논리가 복잡해지기 때문이다.
이를 컴퓨터에 적용하기 위해 보통 반복되는 문제를 풀기 위한 작은 프로시저로 구분한다. 즉, 알고리즘이란 주어진 문제를 해결하기 위한 잘 정의된 동작들의 유한집합이다. (프로시저(procedure)는 루틴이나 서브 루틴 및 함수와 같은 뜻으로 하나의 프로시저는 특정 작업을 수행하기 위한 프로그램의 일부를 말한다. 일반적으로 어떤 행동을 수행하기 위한 일련의 작업 순서를 말한다.)
알고리즘의 조건
- 입력 : 외부에서 제공되는 자료는 1개 이상 존재해야 한다.
- 출력 : 적어도 1개 이상의 결과를 출력해야 한다.
- 명확성 : 각 명령어들은 명확하고 모호하지 않아야 한다.
- 유한성 : 명령어들은 유한 번의 수행 수 종료되어야 한다.
- 효과성 : 모든 명령어들은 원칙적으로 종이와 연필만으로 수행될 수 있는 기본적인 것이어야 한다.
알고리즘의 평가
하나의 문제는 다양한 알고리즘으로 해결할 수 있지만, 그 중에서 가장 적합한 알고리즘을 찾는 것이 중요하다. 절대적으로 최상의 알고리즘은 없다. 주어진 문제와 환경을 먼지 숙지해라. 속도와 자원은 상관관계를 가지며, 단순한 알고리즘일 수록 좋다. 알고리즘은 사용빈도에 따른 선택이다. 좋은 알고리즘의 요건은 다음과 같다.
1. 신뢰성이 높을 것
정밀도가 높고 올바른 결과를 얻을 수 있어야 한다.
2. 처리 효율이 좋을 것
계산 횟수가 적고 처리 속도가 빨라야 한다. 알고리즘의 효율성은 'O 표기법(Big O-Notation)'을 단위로 사용한다.
3. 일반적인 것
특정 상황에서만 사용되는 알고리즘이 아니라 다양한 상황에서 통용되어야 한다.
4. 확장성이 있을 것
변경 사항을 간단하게 수정할 수 있어야 한다.
5. 알기 쉬울 것
누가 봐도 알기 쉬워야 한다. 이해하기 어려운 알고리즘은 프로그램 유지보수에 방해가 된다.
6. 이식성이 높을 것
유용한 프로그램은 타 기종에서 사용할 가능성이 높다. 따라서 프로그램의 이식성을 높여야 한다.
알고리즘의 종류
- 정렬(Sorting) : 파일을 순서적으로 재배열 하는 방법
- 검색(Searching) : 파일에서 어떤 것을 찾는것
- 스트링처리(String Processing)
- 기하학(Geometric) 알고리즘
- 그래프(Graph)
- 수학적(Methmatical) 알고리즘
알고리즘과 데이터 구조
컴퓨터에서는 대량의 데이터를 다룰 경우가 많은데, 데이터를 처리할 때 어떤 데이터 구조를 사용하느냐에 따라 문제 해결에 필요한 알고리즘이 달라진다. 데이터 구조와 알고리즘은 밀접한 관련이 있으므로 좋은 데이터 구조를 선택하는 것이 좋은 프로그램을 만드는 기초가 된다.
'정보 처리 > 알고리즘' 카테고리의 다른 글
키값이 두개이고 값이 하나인 데이터를 정렬해야 한다면? (0) | 2011.01.26 |
---|---|
최대 공약수(Greatest Common Divisor) 구하기 (0) | 2010.09.02 |
약수(Divisor) 구하기 (0) | 2010.08.28 |
알고리즘과 비슷하지만 다른 최적화(Optimization)란 (0) | 2008.11.26 |
알고리즘 분석 기준과 유형 (0) | 2008.11.26 |