본문 바로가기

Data Structures and Algorithms

0.2. 알고리즘

알고리즘은 9세기 페르시아 수학자 알 콰리즈미의 이름에서 유래된 말로 어떤 문제를 풀기 위한 단계적 절차를 뜻한다. 알고리즘을 설계한다는 것은 문제 풀이 절차를 설계한다는 것이고, 알고리즘을 구현한다는 것은 프로그래밍 언어를 이용해서 문제 풀이 절차를 실제로 동작하는 코드로 작성한다는 의미이다.

 

입력 문제를 풀기 위한 단계적 절차 (알고리즘) 출력

세상에 다양한 문제가 존재하듯 문제를 풀 때 사용할 수 있는 알고리즘 또한 다양하다. 그 중 고전이라 불릴 수 있는 것은 자주 사용하는 정렬, 탐색, 해싱 등이 그 예이다. 

알고리즘을 공부한다는 것은 어떤 문제를 분석해서 컴퓨터가 알아들을 수 있는 형태로 해법을 설계하고 구현하는 과정을 익힌다는 의미이다. 알고리즘 학습은 단순히 문제 풀이 요령을 익히는 것이 아니다. 알고리즘 동작에 소유되는 메모리(공간)와 프로세싱 파워(시간)를 깊이 이해하고 자원을 효율적으로 활용하면서도 고성능의 코드를 작성하는 방법이다.


현재 프로그래밍 언어의 대부분은 탐색, 정렬과 같은 고전 알고리즘을 구현한 API를 표준 라이브러리로 제공한다. 알고리즘을 공부하면서 익힌 지식은 눈앞에 발생한 문제를 해결할 때 가장 적절한 API를 선택하는 데에도 도움이 된다. 예로, 메모리 효율과 탐색 속도 중 어느 요소를 더 중요하게 여기는가에 따라 레드 블랙 트리를 선택할지 해시 테이블을 선택할지 판단할 수 있게 된다. 알고리즘을 체계적으로 공부하지 않아도 프로그래밍을 할 수 있지만, 높이 올라갈 수 없다.