정글에서 온 개발자
알고리즘의 분석 본문
- 알고리즘을 실행하는 데 필요한 자원을 예측하는 것을 의미한다. 대부분 그 자원은 시간이다.
- 알고리즘을 이용할 구현 기술의 모델을 정의하는 것이 좋음. (ex RAM 모델)
RAM(random-access machine)모델
- 명령어는 동시에 수행되지 않고 차례로 하나씩 실행된다.
- 명령어와 비용도 정확히 하는 것이 좋지만 지루함.(하려고 하지 말자)
- RAM 모델을 남용하기 보다는 실제 컴퓨터가 어떤 식으로 설계되어 있는지 참고하는 것이 좋음
- RAM 의 명령어 - 상수 시간이 걸림
- 산술연산 ( 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지, 내림, 올림)
- 데이터 이동 연산 (읽기, 저장하기, 복사하기)
- 제어 연산 ( 조건 분기, 무조건 분기, 함수 호출, 리턴)
- 단, 워드 크기가 임의로 커지지 않는다는 조건 하에 ( 한번에 처리하는 양이 많은 데 상수시간이 걸리는 건 불가능하다.)
- 지수 연산 등 예외 연산도 있을 수 있다.
- 많은 시간이 걸릴 거 같지만 2를 곱하는 경우 시프트 연산으로 상수시간에 처리 가능
- 캐시나 가상 메모리 등을 포함하지 않는다. (일부 계산 모델에서 고려)
- 알고리즘 분석시 필요한 수학적 지식
- 조합론
- 확률론
- 대수기법
- 식에서 가장 중요한 인자를 알아내는 기법
분석
- 입력 크기 : 주어진 문제에 따라 다르다.
- 가장 자연스러운 척도는 입력 항목의 개수 (정렬, 이산 푸리에 변환 등)
- 필요한 총 비트수 ( 두 정수를 곱하는 문제)
- 두개의 값으로 표현하기도 함 ( 입력이 그래프인경우 ; 노드와 간선의 개수)
- 수행시간 : 기본 연산 개수 또는 실행된 단계의 횟수
- 최악의 경우 수행시간의 장점
- 모든 입력의 수행시간에 대한 상한이 됨 - 이 시간보다 오래 걸리지 않음을 확신할 수 있음
- 최악의 경우가 생각보다 빈번함 (검색에서 값이 없는 경우 등)
- 평균적인 경우가 최악의 경우만큼 좋지 않은 경우가 가끔 있음
- 평균 수행시간을 쓰는 게 좋을 때도 있음
- 증가 차수 : 증가 비율
- 어떤 알고리즘이 다른 알고리즘보다 최악의 경우 수행시간이 더 낮은 증가 차수를 가질 때 더 효율적이라고 한다.
출처
Introduction to algorithm 3rd edition
'정리' 카테고리의 다른 글
백준 '더' 편하게 풀기(문제에만 집중할 수 있게) (1) | 2023.10.19 |
---|---|
주요 정렬 요약(8+2) (0) | 2023.10.18 |
알고리즘과 자료구조의 정의 (1) | 2023.10.17 |
파이썬 ‘=’ 이 연산자가 아니다 논란과 주의할 점 (0) | 2023.10.16 |
소수 구하기의 여러가지 방법과 시간복잡도 비교 (0) | 2023.10.16 |