์๊ณ ๋ฆฌ์ฆ์ ์ ์ : ์ด๋ค ์ ๋ ฅ์๋ ์ ํํ ์ถ๋ ฅ์ ์ ํํ ์๊ฐ ์์ ๋ด๋ ํ๋ก๊ทธ๋จ
- ์ด๋ค ์ ๋ ฅ : ๋ฌธ์ ์ ๋์ด๋๋, ์ ๋ ฅ์ ํฌ๊ธฐ์ ์๊ด์์ด ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค.
- ์ ํํ ์ถ๋ ฅ : ๋ฌธ์ ๊ฐ ์๊ตฌํ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
- ์ ๋ต์ด ์๊ตฌํ๋ ์กฐ๊ฑด์ด ๋ฌด์์ธ์ง ๋ช ์ํ ์ ์๋ค.
- ์ ํํ ์๊ฐ : ๋ฌดํ๋ฃจํ์ ๋น ์ง์ง ์๊ณ ๋ฉ๋ํ ์ ์๋ ์๊ฐ์ ์ข ๋ฃํ๋ค.
ex) 100๋ช ์ ํ์๋ค์ ์ํ ์ ์ ์ค ์ต๋๊ฐ์ ๊ตฌํ์์ค.
- ์ํ์ ๊ท๋ฉ๋ฒ→ ์ ํ์ฑ : ์๋ช ํ๋ค.
- → ์๊ฐ : n๋ช ์ ์ ์๋ฅผ ์ฝ์ผ๋ฉด, n-1๋ฒ ๋น๊ต.
- → max(์ง๊ธ๊น์ง์ ์ต๋๊ฐ, i+1๋ฒ์งธ ํ์์ ์ ์)
ex) 100๋ช ์ ํ์๋ค์ ์ํ ์ ์ ์ค ์ต๋น๊ฐ์ ๊ตฌํ์์ค.
ex) ์ ๋ ฅ : U={1,2, … , n} ์ค์์ ํน์ ํ ์ ํ๋๋ง ๋นผ๊ณ ๋ฌด์์์ ์์๋ก n-1๊ฐ์ ์ซ์๊ฐ ํ๋ฒ์ ํ๋์ฉ ์ ๋ ฅ๋จ.
์ถ๋ ฅ : U์์ ๋น ์ง ํ๋์ ์๋ฅผ ์ฐพ๋๋ค.
- ํฌ๊ธฐ n์ธ ๋ฐฐ์ด A๋ฅผ ๋ง๋ค๊ณ 0์ผ๋ก ์ด๊ธฐํ
- ํ์ํ ๊ณต๊ฐ : ๋ฐฐ์ด A[n]
- ํ์ํ ์๊ฐ(๋น๊ต ํ์) : Best = 1, Worst = n (๋น ์ง ์๊ฐ n์ผ ๋), ํ๊ท n/2
- ์ซ์ k๊ฐ ๋ค์ด์ค๋ฉด A[k] = 1, n-1๊ฐ์ ์ซ์๊ฐ ๋ค์ด์จ ๋ค A๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ธ์ A[j]=0์ธ j์ธ๋ฑ์ค๋ฅผ ์ฐพ๋๋ค.
- ๋ณ์ x๋ฅผ 0์ผ๋ก ์ด๊ธฐํn-1๊ฐ์ ์ซ์๋ฅผ ์
๋ ฅ๋ฐ์ผ๋ฉด, { n(n-1)/2 } - x๋ก ๋น ์ง ์ซ์๋ฅผ ๊ตฌํ ์ ์๋ค. (1๋ถํฐ n๊น์ง์ ์ดํฉ์์ x๋ฅผ ๋นผ๊ธฐ)
- ํ์ํ ๊ณต๊ฐ : ๋ณ์ x (n(n-1)/2๊น์ง ์ ์ฅํ ์ ์๋ ํฌ๊ธฐ)
- ํ์ํ ์๊ฐ : ๋ณ๋์ ์ถ๊ฐ ๊ฒ์ ์๊ฐ์ด ํ์์์, ์ ์ฅ์๋ฅผ ์ด์ฉํ์ฌ ์์ ํ๋ ค๋ฉด ๋จผ์ ์ด ๋ด์ฉ์ ๋ณต์ฌํด์ผํจ
- ์ซ์ k๋ฅผ ์ ๋ ฅ๋ฐ์ ๋๋ง๋ค x = x+k
→ ๋ฌธ์ ์ ๋ณํ๊ณผ ์๊ณ ๋ฆฌ์ฆ ์์
ex) ์ ๋ ฅ : U={1,2, … , n} ์ค์์ ํน์ ํ ์ 2๊ฐ๋ง ๋นผ๊ณ ๋ฌด์์์ ์์๋ก n-2๊ฐ์ ์ซ์๊ฐ ํ๋ฒ์ ํ๋์ฉ ์ ๋ ฅ๋จ.
์ถ๋ ฅ : U์์ ๋น ์ง ๋ ์๋ฅผ ์ฐพ๋๋ค.
- ํฌ๊ธฐ n์ธ ๋ฐฐ์ด์ ๋ง๋ค์ด์ ๋น ์ธ๋ฑ์ค๋ฅผ ์ฐพ๊ธฐ
- ๋ณ๊ฒฝ์ฌํญ → ๊ฐ ์์ ํฉ x์ ๊ฐ ์์ ์ ๊ณฑ์ ํฉ y๋ ๊ตฌํ๋ค.
- u + v = n(n+1)/2 - x
- (u^2 + v^2) = n(n+1)(2n+1)/6 - y
- t^2 - (u+v)t + uv = 0์ ๋ ๊ทผ์ด ์ ๋ต์ด๋ค.
- ๋ฏธ์ง์ ์๊ฐ u์ v๋ผ๊ณ ํ ๋,
ex) ํ๋ ธ์ด ํ. ๊ธฐ๋ฅ 1์ ์๋ฐ n๊ฐ๋ฅผ ์ด๋ป๊ฒ ๊ท์น์ ๋ง์กฑํ๋ฉด์ ๊ธฐ๋ฅ 3์ผ๋ก ๋ชจ๋ ์ฎ๊ธธ ๊ฒ์ธ๊ฐ?
→ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ๊ธฐ๋ฒ ์ค ๋๋ถ๋ฆ(recursion) ์ด์ฉํ๊ธฐ.
- n = 1 ์ผ ๋ ์ฎ๊ธธ ์ ์๋ค.
- n = k ์ผ ๋ ์ฎ๊ธธ ์ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
- n = k+1 ์ผ ๋ ์ ๊ฐ์ ์ ์ด์ฉํ์ฌ k๊ฐ์ ์๋ฐ์ ๊ธฐ๋ฅ2๋ก ์ฎ๊ธด๋ค.
- k+1๋ฒ์งธ ์๋ฐ์ ๊ธฐ๋ฅ 3์ผ๋ก ์ฎ๊ธด๋ค.
- ๊ทธ๋ผ k๊ฐ์ ์๋ฐ์ ๊ธฐ๋ฅ 3์ผ๋ก ์ฎ๊ธธ ์ ์๋ค.
→ k๊ฐ์ ์๋ฐ์ ์ฎ๊ธฐ๋ ๋ฌธ์ = k-1๊ฐ์ ์๋ฐ์ ์ฎ๊ธฐ๋ ๋ฌธ์
๊ฐ์ ๋ฌธ์ ์ด์ง๋ง ์ ๋ ฅ์ ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์๊ณ , ์ฝ๊ฒ ํ ์ ์์ ๋๊น์ง ๋ฌธ์ ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ฉด ๋๋ค.
→ ์๋ฐ์ ์ด๋ ํ์
- n๊ฐ์ ์๋ฐ์ด ์์ ๋ ์๋ฐ์ ์ด๋ ํ์ T(n) : T(n-1) + 1 + T(n-1) = 2T(n-1) + 1
- T(n) = 2^n - 1
ex) Stable Marriage
→ n๋ช ์ ๋จ์์ n๋ช ์ ์ฌ์๊ฐ ์์ ๋, ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋๋ก ๋ชจ๋ ๋จ๋ ๋ฅผ 1:1๋ก ์ง์ง์ ์ ์๋๊ฐ?
- ๋ชจ๋ ๋จ๋ ๋ ์ด์ฑ์ ๋ํ 1~n๋ฑ์ ์ ํธ๋๊ฐ ์๋ค.
- (๋จ,๋ )์ ์์ด (a,b)(c,d)๊ฐ ์๋๋ฐ, b๊ฐ a๋ณด๋ค c๋ฅผ ์ ํธํ๊ณ c๊ฐ d๋ณด๋ค b๋ฅผ ์ ํธํ๋ฉด ์ด๋ค์ ์์ ๊นจ๊ณ ์๋ก์ด ์์ ๋ง๋ค๊ฒ ๋๋ค.
์ด๋ฌํ ์ผ์ด ๋ฐ์ํ์ง ์๊ฒ ํ๊ณ ์ถ๋ค.
- ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ค.
- ์ํ ๊ณผ์ ์์ ๋ชจ๋ ์ฌ์ฑ์ ๋ฐ๋์ ์ง์ ๊ฐ๊ฒ ๋๊ณ , ์กฐ๊ฑด 2์ ์ด๊ธ๋๋ ๊ฒฝ์ฐ๋ ์ํ ๊ณผ์ ์์ ์ ๊ฑฐ๋๋ค.
- ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋์ ์ข
๋ฃํ๋ค.
- ๋จ์ฑ ๊ธฐ์ค์ผ๋ก ์ํ ๊ณผ์ ์์ ํํธ๋ ๋ณ๊ฒฝ๋๋ง๋ค ํํธ๋ ์ ํธ๋ ๊ฐ์. (์ฌ์ฑ ํํธ๋์ ์ ํธ๋๋ ์ฆ๊ฐ)
- ๋ฐ๋ผ์, ํ ๋จ์ฑ์ด n๋ฒ ์ด์ ํํธ๋๊ฐ ๋ฐ๋ ์ ์๋ค.
- ์ด n^2๋ฒ ์ด์ ํํธ๋๊ฐ ๋ฐ๋ ์ ์์ผ๋ฏ๋ก ์๊ฐ๋ณต์ก๋๋ O(n^2).
์ต์ ์ฑ์ ์ฆ๋ช
- ๋ชจ๋ ์๊ณ ๋ฆฌ์ฆ ์ค ์ด๋ณด๋ค ๋ ์ข์ ์๊ฐ๋ณต์ก๋๋ฅผ ์ป์ ์ ์์์ ์ฆ๋ช ํ๋ ๊ฒ.
- ์ต์ํ ๋ฐ๋์ ์ด๋งํผ์ ์ผ์ ํด์ผํ๋ฏ๋ก ๋ ์ ํ ์๋ ์๋ค๋ ๊ฒ์ ๋ณด์ธ๋ค.
ex1) ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด E[1 … n] ์์ ์ด๋ค ๊ฐ k๊ฐ ์๋์ง ์ฐพ๊ณ , ์๋ค๋ฉด ๊ทธ ์ธ๋ฑ์ค๋ฅผ, ์๋ค๋ฉด -1๋ฅผ ๋ฐํํ์์ค
int index, ans = -1;
for(index = 0; index < n; index++){
if(k == E[index]){
ans = index;
break;
}
}
return ans;
- ex1์ ์ต์ ์ฑ ์ฆ๋ช
- ๋น๊ต๋ฅผ ํ๋ฒ ํ ๋๋ง๋ค, ์์ ํ๋์ ๋ต ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค.
- ๋ฐ๋ผ์ ์ด n๋ฒ์ ๋น๊ต๊ฐ ํ์ํ๋ค.
- n๋ฒ ๋น๊ต๋ฅผ ํ์ง ์์ผ๋ ค๋ฉด, ์ ๋ ฌ์ ํ๊ฑฐ๋ ๋ค๋ฅธ ๋น์ฉ์ ์ง๋ถํด์ผํจ.
ex2) ์ ๋ ฌ๋ ๋ฐฐ์ด E[1 … n] ์์ ์ด๋ค ๊ฐ k๊ฐ ์๋์ง ์ฐพ๊ณ , ์๋ค๋ฉด ๊ทธ ์ธ๋ฑ์ค๋ฅผ, ์๋ค๋ฉด -1๋ฅผ ๋ฐํํ์์ค
- E[1], E[b+1], E[2b+1], … ์ k๋ฅผ ๋น๊ตํ๋ค.E[ ib + 1 ] , E[ ib + 2 ], … E[ (i+1)b ]์์ k๊ฐ์ ์ฐพ๋๋ค.
- ์๊ฐ๋ณต์ก๋ : Worst = n/b + b ๋ฒ ๋น๊ต (์ด๋ถํ์๋ณด๋ค๋ ๋๋ฆฌ์ง๋ง ๊ตฌํ์ ๋ ์ฝ๋ค)
- b = $root(n)$์ผ ๋, ์ต์๊ฐ = 2 $root(n)$ = $O(root(n))$
- ex : b=3, ์ธ๋ฑ์ค 1๊ณผ 4์ 7 ๋น๊ต, … ๋ง์ฝ k๊ฐ 5๋ผ๋ฉด 4≤5<7 ์ด๋ฏ๋ก i=2
- E[ ib + 1 ] ≤ k < E[ (i+1)b + 1 ]์ธ i๋ฅผ ์ฐพ๋๋ค.
- ์ด์ง ํ์T(n) = 1 + T(n/2) = 1 + (1 + T(n/4)) = … = 1+1+…+1+ T(n/2^k) = k + 1 = O(log n) ๋ฒ ๋น๊ต
- ์ฆ ์๊ณ ๋ฆฌ์ฆ 1์ ์ต์ ์ด ์๋๋ค. ์ด์งํ์์ด ์ต์ ์ผ๊น?
- n = 2^k ๋ก ๊ฐ์ ํ๋ฉด,
ํจ์์ ์ฆ๊ฐ, ์๊ฐ๋ณต์ก๋
- ์ฐ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ์ด ์ ๋ ฅ์ด n๊ฐ ์ฃผ์ด์ง ๋ ์ฐ์ฐ์ ๊ฐ์๋ฅผ ํจ์ f(n)์ด๋ผ ํ์.
- ์ ์์ f(n)์ ์์ฐ์์ ๋ํด ์ ์๋ ํจ์์ด๋ค.
- ์ฆ๊ฐํจ์์ผ ๊ฒ์ด๋ค.
- ๊ทธ๋ ๋ค๋ฉด f(n)์ด n์ ์ฆ๊ฐ์ ๋ฐ๋ผ ์ผ๋ง๋ ๋นจ๋ฆฌ ์ปค์ง๋์ง๋ฅผ ์๋ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ ์ฑ๋ฅ ํ๊ฐ์ ์ค์ํ๋ค.
g(n) = O(f(n)) → g๋ f๋ณด๋ค ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ์ง ์๋๋ค. (g ≤ f)
'๐ ์ ๊ณต ๊ณต๋ถ > ์๊ณ ๋ฆฌ์ฆ ํด์ ๋ฐ ์ค๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] Greedy algorithm - ์ด์งํธ ๋๋์ (cpp) (0) | 2023.02.09 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ์ ์ต์ ์ฑ (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] ๋น๊ต๊ธฐ๋ฐ ์ ๋ ฌ์ ํ๊ณ/๋น๊ต์ ๊ธฐ๋ฐํ์ง ์์ ์ ๋ ฌ (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] ๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ ๋ฌธ์ (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] ์ ํ์์ ์ดํด(recurrence relation) (0) | 2023.01.16 |