본문 바로가기

Architecture for Software/Algorithm

Algorithm 이란

http://seo.seocompany.ca/google-algorithm-exposed/

출처: http://seo.seocompany.ca/google-algorithm-exposed/



Algorithm은 반드시 확신할 수 있어야 하며, Algorithm의 작동 방식을 배우는 가장 좋은 방법은 실제로 수행하여 보는 것이다.

Algorithm의 현대적인 의미는 조리법, 공정, 방법, 기법, 절차, 루틴 등과 상당히 비슷하다.
다만 Algorithm은 5가지 주요한 특징을 가진다.

1. 유한성(finiteness)
Algorithm은 여러 단계들을 수행한 후 유한한 횟수 후 반드시 종료되어야 한다. 이러한 유한성이 만족되어야 Algorithm으로 인정받을 수 있다.

2. 명확성(definiteness)
Algorithm의 각 단계는 반드시 명확하게 정의되어야 한다. 수행할 행동은 모든 경우에 대하여 모호함 없이 엄격하게 명시해야 한다.

Algorithm은 컴퓨터도 따라할 수 있을 정도로 명확하여야 한다.

출처: The Art of Computer Programming

3. 입력(input)
Algorithm은 0 또는 그 이상의 입력들을 가진다. 여기서 입력이라 함은 Algorithm이 시작되기 전에 Algorithm에 제공되거나, Algorithm 수행 중에 동적으로 주어진 수량들을 말한다.

4. 출력(output)
Algorithm은 1개 이상의 출력들을 가진다. 출력은 입력과 특정한 관계를 가지는 수량이다.

5. 효과성(effectiveness)
일반적으로 Algorithm은 효과적(effective)이어야 한다고 간주된다. 여기서 효과적이라는 말은, 이론적으로는 Algorithm의 모든 연산들이 종이와 연필을 이용하여 유한한 시간안에 정확하게 수행할 수 있을 정도로 충분히 단순해야 한다는 차원의 이야기이다.


현실적으로 우리가 원하는 것은 그냥 Algorithm이 아니라 다소 느슨한 미학적인 정의를 가진 좋은 Algorithm이다. 여기서 좋은 Algorithm에 대한 한가지 조건은 Algorithm의 수행시간이다. 이 수행시간은 각 단계의 수행 횟수로 표현할 수 있다. 또 다른 조건들로는 다양한 종류의 컴퓨터들에 대한 적응성이나 Algorithm의 단순성, 우아성 등을 들 수 있다.

계산적 방법을 컴퓨터 언어로 표현한 것을 프로그램이라고 한다.

출처: The Art of Computer Programming

'Architecture for Software > Algorithm' 카테고리의 다른 글

최대 공약수 구하기  (0) 2009.11.09
RLE(Run-Length Encoding) 알고리즘  (2) 2009.11.09
Top Coder에 도전하세요!  (4) 2009.01.01
The 3n+1 Problem  (3) 2008.11.11
스택(Stack)  (0) 2008.10.08