알고리즘이란?
알고리즘(Algorithm) = 문제를 해결하기 위한 단계적인 절차
* 해결 방법은 다양하지만 가장 효율적인 방법을 찾는 것에 의의가 있다
알고리즘의 특성
- 정확성: 주어진 입력에 대해 올바른 해를 주어야 한다
- 수행성: 각 단계는 컴퓨터에서 수행 가능해야 한다
- 유한성: 일정한 시간 내에 종료되어야 한다
- 효율성: 효율적일수록 그 가치가 높아진다
유클리드(Euclid)의 최대공약수 알고리즘 = 최초의 알고리즘
알고리즘의 표현 방법
알고리즘은 프로그래밍 언어나 의사 코드(pseudo code)로 표현할 수 있다
최대값 알고리즘을 표현하는 다양한 방식..
알고리즘의 분류
문제 해결 방식에 따른 분류
- 분할 정복(Divide-and-Conquer) 알고리즘
- 그리디(Greedy) 알고리즘
- 동적 계획(Dynamic Programming) 알고리즘
- 근사(Approximation) 알고리즘
- 백트래킹(Backtracking) 기법
- 분기 한정(Branch-and-Bound) 기법
문제에 기반한 분류
- 정렬 알고리즘
- 그래프 알고리즘
- 기하 알고리즘
특정 환경에 따른 분류
- 병렬 (Parallel) 알고리즘
- 분산 (Distributed) 알고리즘
- 양자 (Quantum) 알고리즘
알고리즘의 효율성
알고리즘의 효율성은 다음 두 가지로 판단한다
- 시간복잡도(time complexity): 알고리즘의 수행 시간
- 공간복잡도(space complexity): 사용되는 메모리 공간의 크기
* 일반적으로 성능 측정에는 시간 복잡도가 사용
시간 복잡도 측정 기준은 기본 연산(Elementary Operation)의 횟수이다
ex) 데이터의 비교, 읽기와 갱신, 연산 등..
시간복잡도 표현 방법
- 최악경우 분석(Worst-case Analysis): 수행시간의 상한(Upper Bound)을 의미
- 평균경우 분석(Average-case Analysis): 수행시간의 일반적 균등분포(Uniform Distribution)를 가정
- 최선경우 분석(Best-case Analysis): 가장 빠른 수행시간의 최적(Optimal) 알고리즘 분석
- 상각 분석(Amortized Analysis): 수행시간을 모두 더하고 총 연산 횟수로 나누어 분석
* 일반적으로 알고리즘의 수행시간은 최악경우 분석으로 표현
다항식 함수로 표현된 시간복잡도의 점근적 상한을 표기한 것이 빅오 표기법(big-O notation)이다
빅오 표기법은 시간단위가 아닌 단계 수만을 고려한다
- 배열의 끝에 삽입이나 삭제: O(1)
- 배열의 선형검색: O(n)
- 배열의 이진검색: O(logn)
* 10억개의 숫자를 정렬할 때, O(n^2)알고리즘은 300여년, O(nlogn)알고리즘은 5분이 걸린다
'Computer Science > Algorithm' 카테고리의 다른 글
[HUFS/알고리즘] #3 분할 정복 알고리즘(2) (0) | 2022.03.28 |
---|---|
[HUFS/알고리즘] #2 분할 정복 알고리즘(1) (0) | 2022.03.21 |
[HUFS/자료구조] #10 그래프 (2) | 2021.12.09 |
[HUFS/자료구조] #9 탐색 트리 (0) | 2021.11.25 |
[HUFS/자료구조] #8 트리 (0) | 2021.11.18 |