자바 Do,It 알고리즘(끝)

[자바 Do It! 알고리즘]Chapter03 검색 알고리즘(복잡도-선형검색, 이진검색)

의창s 2021. 4. 29. 22:52

<복잡도>

1. 프로그램의 실행속도는 프로그램이 동작하는 하드웨어나 컴파일러 등의 조건에 따라 달라집니다.

2. 알고리즘의 성능을 객관적으로 평가하는 기준을 복잡도(Complexity)라고 합니다.

3. 복잡도는 아래의 두 가지 요소를 가지고 있습니다.

1) 시간 복잡도(time Complexity) : 실행에 필요한 시간을 평가한 것

2) 공간 복잡도(space complexity) : 기억 영역과 파일 공간이 얼마나 필요한 가를 평가한 것

<선형 검색의 시간 복잡도>

단계

코드

실행 횟수

복잡도

1

int i = 0;

1

O(1)

2

while(i<n)

n/2

O(n)

3

a[i] == key

n/2

O(n)

4

return i;

1

O(1)

5

i++

n/2

O(n)

6

return –1;

1

O(1)

변수 i에 0을 대입(1단계) 하는 횟수는 처음 한번 실행한 이후에는 없습니다.

이렇게 한번만 실행하는 경우 복잡도는 O(1)로 표기합니다.

물론 메서드에서 값을 반환하는 4단계와 6단계도 한 번만 실행하기 때문에 O(1)로 표기합니다.

배열의 맨 끝에 도달했는지 판단하는 2단계와 현재 검사하고 있는 요소와 찾고자 하는 값이 같은지를 판단하는 3단계의 평균 실행횟수는 n/2입니다. 이처럼 n에 비례하는 횟수만큼 실행하는 경우의 복잡도를 O(n)으로 표기합니다.

※ 복잡도를 표기할 때 사용하는 O는 Order에서 따온 것입니다. O(n)은 'O -n', 'Order n', 'n 의 Order'라고 읽습니다.

※ 컴퓨터에게 n/2 와 n의 차이는 크지 않습니다. n의 값이 무한히 커진다고 가정하면 값의 차이가 무의미해지기 때문입니다.

1. 즉 , 2개 이상의 복잡도로 구성된 알고리즘의 전체 복잡도는 차원이 더 높은 쪽의 복잡도를 우선시합니다.

2. 그러므로 선형 검색 알고리즘의 복잡도를 구하면 아래처럼 O(n)이 됩니다.

O(1) + O(n) + O(n) + O(1) + O(n) + O(1) = O(max(1, n, n, 1, n, 1) ) =O(n)

<이진 검색의 시간 복잡도>

1. 이진검색법을 이용하면 검색할 요소의 범위를 절반씩 좁힐 수 있습니다.

단계

코드

실행 횟수

복잡도

1

int pl = 0

1

O(1)

2

int pr = n - 1

1

O(1)

3

int pc = (pl + pr) /2

log n

O(log n)

4

a[pc] == key

log n

O(log n)

5

return pc

1

O(1)

6

a[pc] < key

log n

O(log n)

7

pl = pc + 1;

log n

O(log n)

8

pr = pc - 1

log n

O(log n)

9

pl <= pr

log n

O(log n)

10

return -1

1

O(1)

이진 검색 알고리즘의 복잡도는 O(log n)입니다.(선형검색 복잡도 1번설명 참고)