๐Ÿ‘ฉ๐Ÿป‍๐ŸŒพ

Chap 7. Introduction to Computational Complexity: The Sorting Problem ๋ณธ๋ฌธ

Study/Algorithm

Chap 7. Introduction to Computational Complexity: The Sorting Problem

์ฅฌ์Šค์ด 2023. 6. 8. 16:42
728x90

โ–กInsertion Sort

- ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ •๋ ฌ๋œ ๋ฐฐ์—ด์— ๊ฐ’์„ ์‚ฝ์ž…ํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

์ •๋ ฌ ๋ฐฉ๋ฒ•

1. ์ฒซ๋ฒˆ์งธ (i - 1) ๋ฐฐ์—ด ์ž๋ฆฌ๊ฐ€ ์ •๋ ฌ๋˜์—ˆ๊ณ , x๊ฐ€ i๋ฒˆ์งธ ์ž๋ฆฌ์˜ ํ‚ค๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž

2. x๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ x๋ฅผ S[i - 1], S[i - 2] ๋“ฑ๊ณผ ๋น„๊ตํ•œ๋‹ค. ์ด๋Ÿฐ ์ž๋ฆฌ์˜ ์ธ๋ฑ์Šค๋ฅผ j๋กœ ๋‘์ž.

3. S[j + 1] ~ S[i - 1]์˜ ๊ฐ’์„ S[j + 2] ~ S[i]๋กœ ์ด๋™ํ•˜๊ณ  (j + 1)๋ฒˆ์งธ ์ž๋ฆฌ์— x๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.

4. ์ด ๊ณผ์ •์„ i = 2์—์„œ i = n๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

public static void insertionSort(int n, keyType[]S){
    index i,j;
    keyType x;
    
    for(i = 2; i <= n; i++){
        x = S[i]
        j = i - 1
        while(j > 0 && S[j] > x){
            S[j + 1] = S[j];
            j--;
        }
        S[j + 1] = x;
    }
}

Worst Case Time Complexity

Basic Operation : S[j]์™€ x์˜ ๋น„๊ต

Input Size : n

 

์ตœ์•…์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋ฐฐ์—ด์ด ๋‚ด๋ฆผ์ฐจ์ˆ˜์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

W(n) = ∑(i - 1) = n(n-1) / 2

 

Average Case Time Complexity

 

x๋ฅผ k๋ฒˆ์งธ ์ž๋ฆฌ์— ์œ„์น˜ํ•  ๊ฐ€๋Šฅ์„ฑ์€ ๋ชจ๋“  k์— ๋Œ€ํ•ด์„œ ๊ฐ™์œผ๋ฏ€๋กœ x๋ฅผ ์ฃผ์–ด์ง„ i์— ์‚ฝ์ž…ํ•  ๋•Œ ํ•„์š”ํ•œ ํ‰๊ท  ๋น„๊ต ํšŸ์ˆ˜๋Š”

[1 + 2 + 3 + ... + (i - 1) + (i - 1)] / i = [i(i - 1)/2 + ( i - 1)] / i = (i + 1) / 2 - 1 / i = (i + 1)/2 - 1/i

A(n) = ∑((i + 1)/2 - 1/i) โ‰’ (n+4)(n-1)/4 - ln4

โ–กInversion

- ์ˆœ์„œ๊ฐ€ ๋ฐ˜๋Œ€๋กœ ๋˜์–ด ์žˆ๋Š” ๊ฐ’์˜ ์Œ

ex) (5, 8, 2, 6, 4) ์—์„  6๊ฐœ์˜ inversions๊ฐ€ ์กด์žฌ -> (5, 2) , (5, 4), (8, 2), (8, 6), (8, 4), (6, 4)

 

Theorem 7.1

๊ฐ’ ๋น„๊ต์— ์˜ํ•ด์„œ๋งŒ n๊ฐœ์˜ ๊ฐœ๋ณ„ ๊ฐ’์„ ์ •๋ ฌํ•˜๊ณ  ๊ฐ ๋น„๊ต ํ›„ ์ตœ๋Œ€ ํ•˜๋‚˜์˜ inversion์„ ์ œ๊ฑฐํ•˜๋Š” ๋ชจ๋“  ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ ์–ด๋„ n(n-1)/2 ๋ฒˆ์˜ ๊ฐ’ ๋น„๊ต๋ฅผ, ํ‰๊ท ์ ์œผ๋กœ๋Š” ์ ์–ด๋„ n(n- 1)/4 ๋ฒˆ์˜ ๊ฐ’ ๋น„๊ต๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

 

Proof of Theorem 7.1

Worst Case์ธ ๊ฒฝ์šฐ:

์ˆœ์—ด์— n(n-1)/2๊ฐœ์˜ inversions๊ฐ€ ์กด์žฌํ•จ์„ ๋ณด์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

(n, n-1, n-2, ...., 2, 1)์ด ๊ทธ๋Ÿฐ ์ˆœ์—ด์ด๋‹ค. -> ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 2๊ฐœ๋ฅผ ์ž„์˜๋กœ ์„ ํƒํ•˜๋ฉด ๋ฌด์กฐ๊ฑด inversion์ด๋‹ค -> C(n, 2)

 

Average Case์ธ ๊ฒฝ์šฐ:

์ฃผ์–ด์ง„ n์— ๋Œ€ํ•˜์—ฌ n!๊ฐœ์˜ permutations(์ˆœ์—ด)๊ฐ€ ์žˆ๋‹ค.

์ฃผ์–ด์ง„ ์ˆœ์—ด์— inversions์˜ ํ‰๊ท  ์ˆ˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด average case์—์„œ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ์ตœ์†Œ ๋น„๊ต ์ˆ˜์ด๋‹ค.

[∑(# of inversions in the th permutation)] / n!

 

๋งŒ์•ฝ ์–ด๋–ค ์ˆœ์—ด์ด k๊ฐœ์˜ inversions๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด ์ˆœ์—ด์˜ ๋ฐ˜์ „์€ C(n, 2) - k ๊ฐœ์˜ inversions๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ์ˆœ์—ด์„ ๋ฐ˜์ „์‹œํ‚ค๋ฉด inversion์ด์˜€๋˜ ์Œ์ด ์ˆœ์„œ์— ๋งž๊ฒŒ ๋˜๊ณ , ์ˆœ์„œ์— ๋งž๋˜ ์Œ๋“ค์ด inversion์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ex) ์•ž์„œ ๋ดค๋˜ (5, 8, 2, 6, 4) ์ˆœ์—ด์„ ๋‹ค์‹œ ๋ณด๋ฉด 6๊ฐœ์˜ inversions๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ด ์ˆœ์—ด์„ ๋ฐ˜์ „์‹œํ‚ค๋ฉด (4, 6, 2, 8, 5)๊ฐ€ ๋˜๋ฉฐ, (4, 2), (6, 2), (6, 5), (8, 5)์˜ 4๊ฐœ( = C(5, 2) - 6)์˜ inversions๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

 

๊ทธ๋ž˜์„œ ๋ชจ๋“  ์ˆœ์—ด๊ณผ ๊ทธ ๋ฐ˜์ „์˜ ์Œ์€ C(n, 2)๊ฐœ์˜ inversions๋ฅผ ๊ฐ–๊ณ , ์ด๋Ÿฐ ์Œ์€ n!/2๊ฐœ ์กด์žฌํ•˜๋ฏ€๋กœ 

[∑(# of inversions in the th permutation)] / n! = [C(n, 2) * n!/2] / n! =  C(n, 2)/2 = n(n - 1)/4

โ–กHeap

- ๊ฐ ๋…ธ๋“œ์— ์ €์žฅ๋œ ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์— ์ €์žฅ๋œ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ณธ์งˆ์ ์œผ๋กœ ์™„์ „ํ•œ ์ด์ง„ ํŠธ๋ฆฌ (heap ์†์„ฑ)

โ–กHeapSort

- ํž™์ด ์ฃผ์–ด์ง€๋ฉด ํž™ ์†์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ฃจํŠธ์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ฐ’์„ ์ œ๊ฑฐํ•œ๋‹ค.
- ์ œ๊ฑฐ๋œ ๊ฐ’์„ n๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ฒซ๋ฒˆ์งธ ์ž๋ฆฌ์œผ๋กœ ๋‚ด๋ ค๊ฐ€๋Š” ๋ฐฐ์—ด์— ๋„ฃ๋Š”๋‹ค.

 

ํ•ด๊ฒฐํ•ด์•ผํ•  ๊ฒƒ๋“ค

1. ์–ด๋–ป๊ฒŒ ์ดˆ๊ธฐ heap์„ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ๊ฐ€?

2. heap ์†์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์–ด๋–ป๊ฒŒ ๊ฐ’์„ ์ œ๊ฑฐํ•  ๊ฒƒ์ธ๊ฐ€?

 

How to construct the initial heap?

1. ๋ฐฐ์—ด S[1 .. n]์˜ ๊ฐ’๋“ค์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, S[1]์˜ ๊ฐ’์„ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ์„ค์ •ํ•˜์—ฌ ๊นŠ์ด๊ฐ€ d์ธ ์™„์ „ํ•œ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. level d์ธ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ heap์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๋‹ค์Œ์œผ๋กœ level d-1 ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ heap์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ „์ฒด ํŠธ๋ฆฌ๊ฐ€ heap์œผ๋กœ ๋ฐ”๋€” ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์ค€๋‹ค.

 

How to remove the root key from a heap?

1. ๋ฃจํŠธ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ  level d์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ๋ฃจํŠธ๋กœ ์˜ฎ๊ธด๋‹ค.

2. heap ์†์„ฑ์ด ๋ณต์›๋  ๋•Œ๊นŒ์ง€ ํ•ด๋‹น ๊ฐ’์„ ์•„๋ž˜๋กœ ์ด๋™ํ•œ๋‹ค.

 

Worst Case Time Complexity of HeapSort

Basic Operation : ๊ฐ’์„ ์•„๋ž˜๋กœ ์ด๋™ํ•˜๋ฉด์„œ ์ผ์–ด๋‚˜๋Š” ๊ฐ’ ๋น„๊ต

Input Size : n

makeHeap = n - 1

removeKeys = n lg n - 2n + 2

∴ (n - 1) + (n lg n - 2n + 2) = n lg n - n + 1 ๐šฏ (n lg n)

โ–กLower Bounds for Sorting Only by Comparisons of Keys

Decision Tree for insertion sort

a = S[1], b = S[2], c = S[3]์ด๋ผ ๊ฐ€์ •ํ•˜์ž.

Decision Tree๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค. ์ด๋•Œ, ํ•‘ํฌ์ƒ‰์œผ๋กœ ์ ํžŒ ๊ฒƒ์€ ํ˜„์žฌ state์ด๋‹ค.

728x90

'Study > Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Chap 9. Introduction to the Theory of NP  (0) 2023.06.11
Chap 6. Branch and Bound  (0) 2023.06.06
Chap 5. Backtracking  (0) 2023.06.04
Chap 4. The Greedy Approach  (0) 2023.06.01
Chap 3. Dynamic Programming  (0) 2023.04.20
Comments