๐ฉ๐ป๐พ
Chap 7. Introduction to Computational Complexity: The Sorting Problem ๋ณธ๋ฌธ
Chap 7. Introduction to Computational Complexity: The Sorting Problem
์ฅฌ์ค์ด 2023. 6. 8. 16:42โก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 i 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 i 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์ด๋ค.
'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 |