과학을 공부하는 목적은 무엇일까? 특히 Mathematical Science의 궁극적인 목적은 무엇일까?
우리가 세계에서 겪는 현상들을 일일이 다 실험을 해서 알아보기는 힘들것이다.
그러므로 우리는 예측을 해야 한다. 예를 들어, 시속 몇km로 달려서 교통사고가 났을때 사람이 죽는가?
같은 문제는 일일이 실험을 할 수 없다. 수학과 통계적인 방법을 사용하여 예측하여야 하는 것이다.
마찬가지로, Computer Science에도 예측이 필요하다. 어떤 데이터를 가져와 프로그램을 실행했을때 결과가 어떻게 나올 것인가? 메모리는 얼마나 필요한가? 시간은 얼마나 걸리는가? 를 미리 알기 위한 예측이 필요하다.
이때 도움이 되는 과목이 알고리즘이다.
알고리즘은 여러가지가 있지만. 이 블로그에서 주로 포스팅 될 알고리즘은 컴퓨터 알고리즘이다. 알고리즘은 문제를 해결하기 위한 절차다. 이때, 알고리즘은 세 가지 특성을 가진다. 유한(finite), 결정적(deterministic), 효율(efficiency).
이 세가지 특성 중 특히 중요한 특성이 finite과 deterministic이다. 첫 번째로 finite한 특성은 알고리즘은 반드시 종료되어야 한다는 특성을 가진다. 절차가 종료되지 않고 무한히 순환한다면 그것은 알고리즘이라 할 수 없다. 두 번째로 deterministic한 특성을 가져야 한다. 언제 어디서 누가 이 프로그램을 실행하던 똑같은 결과를 도출해야 한다. 세 번째 efficiency특징은 finite하고 deterministic한 알고리즘이 여러 개 있으면 가능하면 효율적인 알고리즘을 사용하는 것이 좋을 것이다.