알고리즘(algorithm)은 주어진 문제를 해결하기 위한 명확하고 체계적인 단계적 절차 또는 명령어의 집합을 의미한다. 특정 입력값을 받아 정해진 단계를 거쳐 원하는 출력값을 생성하는 과정을 기술하며, 컴퓨터 과학뿐만 아니라 수학, 공학, 경제학 등 다양한 분야에서 문제 해결의 핵심적인 도구로 활용된다.
알고리즘은 다음의 주요 특징을 갖는다:
- 명확성 (Definiteness): 각 단계는 모호함 없이 정확하게 정의되어야 한다.
- 유한성 (Finiteness): 유한한 단계를 거쳐 반드시 종료되어야 한다. 무한 루프에 빠지지 않아야 한다.
- 효율성 (Effectiveness): 각 단계는 실행 가능하고 현실적인 시간 내에 완료될 수 있어야 한다.
- 입력 (Input): 0개 이상의 입력을 받을 수 있다.
- 출력 (Output): 최소 1개 이상의 출력을 생성해야 한다.
알고리즘은 문제를 해결하는 방법론을 추상적으로 기술한 것으로, 특정한 프로그래밍 언어에 종속되지 않는다. 따라서 동일한 알고리즘을 다양한 프로그래밍 언어로 구현할 수 있다. 알고리즘의 효율성은 시간 복잡도와 공간 복잡도로 평가되며, 동일한 문제를 해결하는 여러 알고리즘 중 효율성이 높은 알고리즘을 선택하는 것이 중요하다.
알고리즘의 예시로는 정렬 알고리즘 (예: 버블 정렬, 삽입 정렬, 병합 정렬, 퀵 정렬), 탐색 알고리즘 (예: 선형 탐색, 이진 탐색), 그래프 알고리즘 (예: 최단 경로 알고리즘, 최소 신장 트리 알고리즘) 등이 있다.