알고리즘에 대하여
알고리즘(algorithm), 셈법은 수학과 컴퓨터과학, 언어학 또는 엮인 분야에서 어떠한 문제를 풀어맺기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것, 계산을 실행하기 위한 단계적 절차를 의미한다. 즉, 문제풀이에 필요한 계산절차 또는 처리과정의 순서를 뜻한다. 프로그램명령어의 집합을 의미하기도 한다. 알고리즘은 연산, 데이터 마이닝(기계 학습) 또는 자동화된 추론을 수행한다.
알고리즘의 정의
대부분의 알고리즘은 유한한 수의 규칙에 따라 구별 가능한 기호들을 조작하여 입력 정수에서 출력 정수를 생성하기 위한 일반화된 작업을 정의한다. 다음은 좋은 알고리즘의 특징이다.
- 정밀성: 변하지 않는 명확한 작업 단계를 가져야 한다.
- 유일성: 각 단계마다 명확한 다음 단계를 가져야 한다.
- 타당성: 구현할 수 있고 실용적이어야 한다.
- 입력: 정의된 입력을 받아들일 수 있어야 한다.
- 출력: 답으로 출력을 내보낼 수 있어야 한다.
- 유한성: 특정 수의 작업 이후에 정지해야 한다.
- 일반성: 정의된 입력들에 일반적으로 적용할 수 있어야 한다.
알고리즘 구현
알고리즘은 자연어, 의사코드, 순서도, 프로그래밍언어, 인터프리터가 작업하는 제어테이블, 유한상태기계의 상태도 등으로 표현할수 있다. 다음은 알고리즘 개발의 정형적인 단계이다.
문제 정의 → 모델 고안 → 명세 작성 → 설계 → 검증 → 분석 (복잡도 등) → 구현 → 테스트 → 문서화
알고리즘을 설계하는 기술에는 운용과학의 방법, 설계짜임새를 써먹는 방법 등이 있다. 대부분의 알고리즘은 컴퓨터 프로그램으로 구현되지만, 전기 회로나 생물학적 신경회로를 사용하기도 한다.
알고리즘 분류
- 구현: 재귀적 알고리즘, 연역적 알고리즘, 결정론적 알고리즘, 근사 알고리즘, 양자 알고리즘 등.
- 설계: 무차별 대입 공격, 분할 정복 알고리즘, 그래프 순회, 분기 한정법, 확률적 알고리즘, 리덕션, 백트래킹 등.
- 최적화 문제: 선형 계획법, 동적 계획법, 탐욕 알고리즘, 휴리스틱 함수 등.
- 이론적 분야: 검색 알고리즘, 정렬 알고리즘, 수치 알고리즘, 그래프 알고리즘, 문자열 알고리즘, 암호학적 알고리즘, 기계 학습, 데이터 압축 등.
알고리즘 복잡성
입력의 크기가 일 경우, 점근 표기법 를 사용하여 다음과 같이 나타낸다.
-
: 에 관계없이 일정 시간 이하에 수행되는 알고리즘이다.
- 예) 파일의 첫 번째 바이트가 널(null)인지 검사하는 것.
-
: 에 비례하는 시간 이하에 수행되는 알고리즘이다.
- 예) 이진 탐색.
-
: 에 비례하는 시간 이하에 수행되는 알고리즘이다.
- 예) 기수 정렬.
-
: 에 대략 비례할 수 있는 시간 이하에 수행되는 알고리즘이다.
- 예) 정렬 알고리즘.
-
: 에 비례하는 시간 이하에 수행되는 알고리즘이다.
- 예) 최장 공통 부분 수열 문제.
-
: 에 비례하는 시간 이하에 수행되는 알고리즘이다.
- 예) 행렬 곱셈.
-
: 과 같은 꼴의 수행 시간 이하에 수행되는 알고리즘이다.
- 예) 충족 가능성 문제.
-
: 즉 과 같은 꼴의 수행 시간 이하에 수행되는 알고리즘이다.
- 예) 배열의 모든 순열을 검사하는 것.
점근 표기법의 특성상 아래의 복잡도는 그 위의 복잡도를 포함하므로, 대부분의 알고리즘은 의 수행 시간을 가진다.
알고리즘 예시
가장 단순한 알고리즘 가운데 하나는 임의로 나열된 숫자들 가운데 가장 큰 수를 찾는 것이다. 다음은 목록 안에 있는 모든 수를 살펴보는 알고리즘이다.
LargestNumber Algorithm
Input: A list of numbers L.
Output: The largest number in the list L.
if L.size = 0 return null
largest ← L[0]
for each item in L, do
if item > largest, then
largest ← item
return largest