자료구조,C++

1.2 알고리즘의 분석

KIKI_BI0 2024. 1. 12. 10:00
SMALL

1. 경험적 분석과 수학적 분석

분석은 알고리즘을 정확히 선택하기 위한 방법

시간 소요량 vs 공간소요량

 

- 경험적 분석(Empirical Analysis)

-> 실제 코드를 작성 후, 실행하여 시간을 측정

-> 데이터 수를 다르게 하여 함수관계 유추

 

- 수학적 분석(Mathematical Analysis)

-> 알고리즘 자체를 가지고 수학적인 분석을 함

 

2. 최악의 경우와 최선의 경우

-> 최악의 경우(Worst Case)

가장 많은 시간과 자원을 필요로 하는 경우

-> 최선의 경우 (Best Case)

가장 적은 시간과 자원만이 소요되는 경우

-> 평균적 경우(Average Case)

개념이 모호함

자료의 균일분포? 가장 많은 빈도의 경우?

(적당한 시간과 자원이 소요되는 경우가 아닐까..?)

 

3. 알고리즘 유형

- 1(상수)

입력 자료수와 관계없이 일정한 실행시간

해쉬 검색 알고리즘 등

 

- log N

Divide & Conquer 방법 사용시

이진검색, 이진트리 검색 등

 

- N

Scan 방법 사용시

선형 검색 등

 

- N log N

Divide & Conquer & Merge  방법 사용시

병합정렬 등

 

- N^2

이중 루프

삽입 정렬, 선택 정렬

 

- N^3

삼중 루프

 

 

4-1. 알고리즘 성능 표기법(Big-Oh)

알고리즘의 성능을 객관적으로 표현하는 방법

O표기법(Big-Oh Notation)

-> 실행시간 함수 T(N)이 N0보다 큰 N에 대하여 항상 C0f(n)보다 작거나 같은 C0과 N0가 존재한다면 T(N)은 O(f(N))이라고 한다. 즉, N>=N0인 모든 N에 대하여 T(N)<=C0f(N)이 만족하면 T(N) = O(f(N))임

-> 보통 T(N)에서 가장 영향력있는 항이 선택됨 

ex) T(N) = 3N^2 + 1 이라면 O(N^2)

-> N>=1인 모든 N에 대해 T(N) <= 4N^2

 

4-2. 알고리즘 성능 표기법(Ω, ⊖)

Ω 표기법

-> 실행시간 함수 T(N)이 N0보다 큰 N에 대하여 항상 C0f(N)보다 크거나 같은 C0과 N0가 존재한다면, T(N)은

Ω(f(N)) 이라고 함. 즉, N >= N0인 모든 N에 대해 T(N) >= C0f(N)이 만족하면 T(N) = Ω(f(N))임

 

⊖ 표기법

-> 실행시간 함수 T(N)이 N0보다 큰 N에 대해 항상 C1f(N)보다 크거나 같고, C2f(N)보다 작거나 같은 C1, C2가 존재한다면 T(N)은 ⊖(f(N))이라고 함. 즉, N >= N0인 모든 N에 대해 C1f(N) <= T(N) <= C2f(N)이 만족하면 T(N) = ⊖(f(N))임

 

 

 

 

LIST