๐ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ง๊ณ ์ฌ ์ ๋ฆฌ
๊ธฐ๋ง๊ณ ์ฌ
10
์๊ณ ๋ฆฌ์ฆ : ๋ค์ ์กฐ๊ฑด ๋ง์กฑํด์ผํจ (์ ๋ ฅ, ์ถ๋ ฅ, ๋ช ํ์ฑ, ์ ํ์ฑ, ์ ํจ์ฑ)
- ์ ๋ ฅ : ์ธ๋ถ ์ ๋ ฅ์ด ์ฃผ์ด์ง
- ์ถ๋ ฅ : ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋จ
- ๋ช ํ์ฑ : ์ ๋ขฐํ ์ ์๋ ์์
- ์ ํ์ฑ : ์ ํํ ๊ฐ์๋ฅผ ์คํํด์ผํจ โ ๋ฌดํํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ด๋ผ ํ ์ ์์ OS๊ฐ์๊ฑฐ
- ์ ํจ์ฑ : ์งง์ ์๊ฐ ๋ด์ ์ํ๋ ์ ์์ด์ผ ํจ โ ๋ณต์กํ์ฌ ๋๋ฌด ๊ธด์๊ฐ์ด ํ์ํ๊ฑด ์ ํจํ๋ค๊ณ ํ ์ ์์.
๋ถ์ : ์ถ์ ํ๋ ๊ฒ
์ธก์ : ์ค์ ๋ก ์ธก์ ํ๋ ๊ฒ (์ถ์ ๊ณผ ์ธก์ ์ ์ฐจ์ด)
์ถ์ ์ ๊ฒฐ๊ณผ๋ก ๋ณต์ก๋๊ฐ ๋์จ๋ค.
๊ณต๊ฐ๋ณต์ก๋ : ์คํ์ ๋ง์น ๋ ๊น์ง์ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ ์ถ์ ์น
๊ณ ์ ๋ ํฌ๊ธฐ : ์ฝ๋ ์์ฒด์ ํฌ๊ธฐ, ์ปดํ์ผ์๋ถํฐ ์ ํด์ง ๋ณ์์์์ ํฌ๊ธฐ
๊ฐ๋ณ์ ํฌ๊ธฐ : ์ ์ถ๋ ฅ์ ํฌ๊ธฐ, ์ฌ๊ท์ ํ์ํ ๊ณต๊ฐ ๋ฑ ์คํ ์์ ์์ ์ ํด์ง๋ ํฌ๊ธฐ๋ค
์๊ฐ๋ณต์ก๋ : ์คํ์ ํ์ํ ์๊ฐ ์ถ์ ์น
์ด์งํผ ์์ ์๊ฐ์ ์ปดํ์ผ๋ฌ/์ธ์ด/ํ๊ฒฝ๋ง๋ค ๋ค ๋ค๋ฅด๋ค.
๋ฐ๋ผ์ ์ฐ์ฐ์ ๊ฐ์๋ฅผ ํตํด ์ถ์ ํจ โ n์ด ์ค์
์ ๋ ฅ์ ํฌ๊ธฐ์ ๊ฐ์๊ฐ ๋ชจ๋ ์๊ฐ๋ณต์ก๋์ ์ํฅ์ ์ค ์ ์๋ฐ. ๋ํ์ ์ผ๋ก ํฌ๊ธฐ๋ factorial ์ฐ์ฐ, ๊ฐ์๋ ์ ๋ ฌ์ฐ์ฐ
์ด์ธ์๋ ๋ค์ํ ์์ธ๋ค์ด ๋ณต์ก๋์ ์ํฅ์ ์ค ์ ์๋ค. ํต์ ๋ ฌ์์ pivot ์ ์ ๋ฐฉ์ ๋ฑ..
๊ทธ๋์ ์๊ฐ๋ณต์ก๋๋ 3๊ฐ์ง๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ๋๋ฐ ์ต์ , ์ต์ , ํ๊ท ์๊ฒฝ์ฐ 3๊ฐ์ง์.
์ด๋ ๊ฒ ๊ฐ๋จํด๋ณด์ด์ง๋ง ์ฌ์ค ์คํ ์๋ฅผ ์๋๊ฑด ์ฌ์ด๋ฌธ์ ๊ฐ ์๋๋ค. ์ ํํ ์๊ฐ์์โฆโฆ
์ํ : big-O โ ex) 5n+4์์ํฉ์์ O(n) ์ด์งํผ ์ํ. ์กด๋ํฐ ๊ฒฝ์ฐ์ด๋ฏ๋ก ์์ ๋ฌด์ธ๋ชจ
์ํ์ ๊ฐ๋ฅํ ์์์๋ก ์ ํํ๊ธฐ๋๋ฌธ์ ์ด๋ ๊ฒํ๋๊ฒ ๋ง์์ฉ ๊ฑ ์ต๊ณ ์ฐจํญ๋ง ๋ ๋ผ์ด์ ์๊ฐ!
O(1), O(log n), O(n), O(n log n), O(n^2), O(n^3), O(2^n)
ํํ : big-Omega โ ex) 3n+3์์ ์ต์ 1์ด์์ ๊ฑธ๋ฆฌ๋ฏ๋ก 1์ด๋ผ๊ณ ๋งํ ์๋ ์๋ค ๊ทผ๋ฐ 1์ด๋ผ๊ณ ๋งํ๋ฉด ๋๋ฌด๋ถ์ ํํ๋๊น ์ต์ n์ ๊ฑธ๋ฆฐ๋ค๊ณ ๋งํ๋ค. ์ํ๊ณผ๋ฌ๋ฆฌ ๊ฐ๋ฅํ ํฌ๊ฒ๋งํ๋ฉด๋๋๊ฑฐ
์ด๊ฒ๋ ์ฝ๊ฒ๋ณด๋ฉด ๊ฑ ์ต๊ณ ์ฐจํญ ๋๋ผ์ ์๊ฐํ๋ค๊ณ ๋ณผ ์๋ ์๊ธดํ ๋ฏ(๋ค๊ทธ๋ฐ๊ฑด์๋๊ฑฐ๊ฐ์)
ํ๊ท : big-Theta ์์์ด๋ค. ๊ทธ๋ฅ big-Oh๊ฐ ์ต๊ณ
11
stay ahead : ๋งค ์คํ ๋ง๋ค ์ต์ ์ ํด๋ต์ ์ฐพ์๊ฐ๋๊ฒ. ex)interval scheduling
exchange argument approach : ๊ทธ๋ฆฌ๋์๊ณ ๋ฆฌ์ฆ์ ํตํด ์ฐพ์์ง ์๋ฃจ์ ์ผ๋ก ์ ์ง์ ์ผ๋ก ๋ณํ์ํค๋๊ฒ. ex)huffman code
์ต๋จ๊ฑฐ๋ฆฌ์ฐพ๊ธฐ๋ ์ต์๋น์ฉํ์ฅํธ๋ฆฌ๊ฐ์๊ฒ๋ ๊ทธ๋ฆฌ๋์
interval scheduling = stay ahead huffman code = exchange argument
interval scheduling
์์ j๊ฐ sj์์์์ํด์ fj์ ๋๋๋ค๊ณ ํ ๋ ์๋ก overlap๋์ง์๋ ์์ ๋ค์ compatibleํ๋ค.
์ํธ๊ฐ์ compatibleํ job๋ค์ ์ต๋ ํ์์งํฉ์ ์ฐพ์๋ด๋๊ฒ์ด interval scheduling์ ๋ชฉํ ๋ง์ ์์ job๋ค์ ์ฑ๊ธฐ๋๊ฒ์ด ์ด๋
๊ทธ๋ฆฌ๋ํ๊ฒ ์ ๊ทผํ๋๋ฐฉ๋ฒ์ด ๋ช๋ช๊ฐ๊ฐ ์๋ค.
- ์ผ์ฐ์์ํ๋๋ : ์์ํ๋ ์๊ฐ์ด ์ฆ๊ฐํ๋ ์์ผ๋ก ๋ณด์ โ ๋น ๋ฅด๊ฒ ์์ํ ์๋ก ์ข๋ค
- ์ผ์ฐ๋๋๋๋ : ๋๋๋์๊ฐ์ด ์ฆ๊ฐํ๋ ์์ผ๋ก ๋ณด์ โ ๋น ๋ฅด๊ฒ ๋๋ ์๋ก ์ข๋ค
- ๊ฐ์ฅ์งง์์ธํฐ๋ฒ : ์์ ์ ์งํ์๊ฐ์ด ๊ฐ์ฅ์งง์ ์์ผ๋ก ๋ณด์ โ ์์ ์๊ฐ์ด ์งง์์๋ก ์ข๋ค
- ๊ฐ์ฅ์ ์๋ถ์ : ๋ค๋ฅธ ์์ ๊ณผ ๊ฒน์น๋ ์๋ฅผ ์ฆ๊ฐํ๋ ์์ผ๋ก ๋ณด์ โ ์๊ฒน์น ์๋ก ์ข๋ค
๋จ, ์ด๋ฏธ ์ ํ๋๊ฑฐ๋ compatibleํ๊ฑธ ๊ณจ๋ผ์ผํจ. ์ ํ๋ ์์ ์ s๊ฐ ๋ง์ง๋ง์ ์ ํ๋ ์์ ์ f๋ณด๋ค ์ปค์ผํ๋ค.
๊ทผ๋ฐ ์์์ ์ ์ํ ๊ทธ๋ฆฌ๋ํ ๋ฐฉ๋ฒ๋ค์ด ๋ค ํตํ๋๊ฑฐ๋ ์๋๋ค.. ๋ชจ๋ ์์ธ๊ฐ์์.
earliest finish time์ด ๋ฐ๋ก์์ด optimalํ๋ค. ์๊ฐ๋ณต์ก๋ O(n log n)
โstay aheadโ ๋ฐฉ์์ผ๋ก.. ๋ชจ์์ ํตํด ์ฆ๋ช ํ๋ค.
๋ง์ฝ greedyํ๊ฒ ์ ํ๋ k๊ฐ์ job๊ณผ ์ค์ optimalํ m๊ฐ์ job์ด ์๋ค๊ณ ์๊ฐํ์. ๊ทผ๋ฐ greedy๋ optimalํ์ง ์๋ค๊ณ ๊ฐ์ ํ์ ์ผ๋จ. r๋ฒ์งธ๊น์ง optimalํ๊ฒ๊ณผ optimalํ์ง ์๋ค๊ณ ๊ฐ์ ๋ greedyํ๊ฒ์ด ๊ฐ๋ค๊ณ ๊ฐ์ ํ ๋, optimal ํ๊ฒ์ r + 1๋ฒ์งธ๊ณผ greedyํ๊ฒ์ r + 1์ด ๊ฐ์ง ๋ชปํ ์ ์๋ค. ์ฆ ๊ฐ์ ์ ๋ฐ์ ์๋ค. ๊ทธ๋ผ optimalํ๊ฑด๋ฐ ๊ฐ์ ์ด optimalํ์ง ์๋ค์์ผ๋ฏ๋ก ๋ชจ์๋๋ค. ์ฆ greedyํ๊ฒ์ด optimalํ์ง ์๋ค๋ ๊ฐ์ ์ด ๋ชจ์๋๋ฏ๋ก greedyํ๊ฒ์ optimal ํ๋ค.
๋ง์ํ๋ r+1์์ greedyํ๊ฒ ์ฐพ์๊ฒ๋ณด๋ค optimalํ๊ฒ ์ฐพ์๊ฒ์๋ค๋ฉด ๋ญ๊ฐ์๋ชป๋๊ฑฐ๋ค.
์ ๋ ฌ๋ ๋ฆฌ์คํธ merge
์ต์ํ์ ๋น๊ต๋ฅผ ํ๋ ๋ฐฉ๋ฒ์? ex) 20๊ฐ๋ฆฌ์คํธ์ 30๊ฐ๋ฆฌ์คํธ, 50๊ฐ๋ฆฌ์คํธ๋ฅผ ํฉ์น ๋
20๊ฐ์ 30๊ฐ๋ฅผ ํฉ์น๋ค(๋น๊ต50ํ) ๊ทธ๋ฆฌ๊ณ 50๊ฐ์ 50๊ฐ๋ฅผ ํฉ์น๋ค (๋น๊ต 100ํ) โ ์ด 150ํ
20๊ฐ์ 50๊ฐ๋ฅผ ํฉ์น๋ค(๋น๊ต 70ํ) ๊ทธ๋ฆฌ๊ณ 70๊ฐ์ 30๊ฐ๋ฅผ ํฉ์น๋ค (๋น๊ต 100ํ) โ ์ด 170ํ
30๊ฐ์ 50๊ฐ๋ฅผ ํฉ์น๋ค (๋น๊ต 80ํ) ๊ทธ๋ฆฌ๊ณ 80๊ฐ์ 20๊ฐ๋ฅผ ํฉ์น๋ค (๋น๊ต 100ํ) โ ์ด 180ํ
๋ถ๋ช ๊ฐ์ ๋ฆฌ์คํธ๋ค์ ํ๋๋ก ํฉ์น๊ฑด๋ฐ๋ ๋น๊ต์ ํ์์ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ค. ๊ฐ์ฅ ๋น๊ต๊ฐ ์ ์ด์ผ ์ฑ๋ฅ์ด ์ข์๊ฑฐ๋ค. ๋น๊ต๊ฐ ์ ๊ฒ ํ๋๋ฐฉ๋ฒ์?
๊ฐ ๋ฆฌ์คํธ์ ํฌ๊ธฐ๊ฐ ๋ฆฌํ๋ ธ๋๊ฐ ๋์ด์ ๋ฐฐ์น๋จ. ์ฌ๋ผ๊ฐ๋๋ง๋ค ๋ํด์ง๊ฑฐ๊ธฐ๋๋ฌธ. ๊ฐ ๋ ธ๋์ ๊ฐ๋ค์ด ์ฌ๋ผ์ค๋๋ฐ ๊ฑฐ์น๋ path๋ง๋ค ๋น๊ตํ์๊ฐ ๊ทธ๋งํผ ๋๊ธฐ ๋๋ฌธ์, ๋ฆฌ์คํธ์ ํฌ๊ธฐ์ ๊ทธ ๋ฆฌ์คํธ์ ๋๋ฌํ๋ path์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณฑํ๊ฐ์ ๋ค ๋ํ๊ฒ ๋น๊ต์ ํ์๊ฐ๋จ. โ ํํ๋ง์ ๊ธฐ๋ณธ ๊ฐ๋
ํํ๋ง์ฝ๋
๋ฌธ์์ด์ 0๊ณผ 1์ ์ํ์ค๋ก ๋ง๋ค์ด ๋ฉ์์ง๋ฅผ ๊ตฌ์ฑํ๋ ๋นํธ์ ์๊ฐ ์ต์ํ์ด ๋๋๋ก ํ๋ค. ๋ฌผ๋ก ๊ตฌ๋ณ ๊ฐ๋ฅํด์ผํจ.
๊ธธ์ด๊ฐ ๊ณ ์ ๋ ์ธ์ฝ๋ฉ์์๋ n๊ฐ ์ฌ๋ณผ์ ํ์์ log2n๋นํธ๊ฐ ํ์ํจ. ๊ณ ์ ๋์ด์์.. ๊ทธ๋์ ๊ณต๊ฐ์ ์ธ ํ์ฉ๋๊ฐ ์ข์ง๋ชปํจ ๊ทธ๋์ ๋ณ์์ ๊ธธ์ด๋ฅผ ๊ฐ๋ ์ธ์ฝ๋ฉ ๋ฐฉ์๋ ์๋๋ฐ, ๋ํ์ ์ผ๋ก ๋ชจ์ค์ฝ๋๊ฐ ์๋ค. ๊ทผ๋ฐ ์ด๋ฐ ์ฝ๋์ ๋ฌธ์ ์ ์ ๊ตฌ๋ถ์ด ์๋๋ฉด ์ ์๊ฐ ์์. ๊ทธ๋์ ๋ชจ์ค์ฝ๋๋ ๊ฐ ๋ฌธ์๋ณ๋ก ๊ตฌ๋ถํด์ฃผ๋ ์ฌ๋์๊ฐ์ด์๋ค.(pause) ๊ทธ๋ฌ๋ค๋ณด๋ ์ฌ์ค์ 0๊ณผ 1์ด์๋๋ผ ๊ทธ๋ฅ 3๊ฐ๋ฅผ ์ด๋ค๊ณ ๋ด์ผํ ์ ๋. ์ ๋ง ๊ทธ๋ฅ 0๊ณผ 1๋ก๋ง ํ๋ ค๋ฉด??
๋ฑ์ฅํ๋ ์ฝ๋๋ ๊ณ ์ (prefix code)๋์ด์๋ค. ๋ง์ฝ ๋์ผํ๊ฒ ๋์ค๋ฉด ๊ทธ๊ฑด ๋ค๋ฅธ์ฌ์ง๊ฐ์์ด ๋ฐ๋ก โ๊ทธ๊ฑฐโ๋ค
๋ฐ๋ผ์ ์ํธํํ๊ฑธ ๋ณตํธํํ ๋ ์์ฐจ์ ์ผ๋ก ์ฝ์ด๋ค์ด๋ฉด์ ์๋ง๋๊ฒ ๋์ค๋ฉด ๊ทธ๊ฒ ๋ฐ๋ก ๊ทธ๊ฑฐ๋ค. ๊ทธ๋ฅ ์์ฌ์ ์ฌ์ง๊ฐ ์๋ค. ๋จ์ ๋นํธ ์์๋๊น์ง ์๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด huffmancode๋ฅผ decodeํ ์ ์๊ฒ ๋๋ ๊ฒ.
๋ฐ์ด๋๋ฆฌ ํธ๋ฆฌ๋ก ํํํ ๋๋ ์ ๋ํฌํ path๋ฅผ ๊ฐ๋๋ก ํด์ค์ผํ๋ฏ๋ก ๋ชจ๋ ์ํ๋ฒณ๋ค์ ํธ๋ฆฌ์ leaf์ ๋์๋๋ค. ๊ทธ๋ฆฌ๊ณ root๋ก๋ถํฐ ๊ฐ ์ํ๋ฒณ(๋ฆฌํ๋ ธ๋)์ผ๋ก์ path๊ฐ ์ข์ธก์ผ๋ก๊ฐ๋ ์ฐ์ธก์ผ๋ก๊ฐ๋๋ฅผ ํ ๋๋ก 0๊ณผ1์ ์ํ์ค๋ฅผ ๋ง๋ค์ด๋ธ๋ค. ๋ฆฌํ๊ฐ ์๋ ๋ ธ๋๊ฐ ๋ชจ๋ ์์์ ๊ฐ์ง๊ฒ๋๋ฉด ๊ฝ์ฐฌ๊ฒ.
์์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ 2๊ฐ ์ ๋ ฌ(optimal 2-way merge) ์ ๋์ผํ ๋ฐฉ์์ด๋ค. ๊ฐ ๋ฌธ์๊ฐ ๋ฑ์ฅํ๋ ํ์๊ฐ ๋ฆฌ์คํธ์ ๊ธธ์ด๋ ๋์๋๊ธฐ๋๋ฌธ. ์ฆ ์ฌ์ด์ฆ๊ฐ ์์์๋ก ๋ฐ์ผ๋ก๊ฐ๋ฉด ์ด๋
๋ฐ๋ผ์ optimal 2-way merge๋ ๋์ผํ๊ฒ ์๊ฐ๋ณต์ก๋๋ O(n log n)์ด๋๋ค!
์ฆ๋ช ์ ๋ค๋ค ๊ทธ๋ฆฌ๋๊ฐ ์ตํฐ๋ฉํ์ง ์์์ ๊ฐ์กฐํ๋๋ฏ. ๊ทธ๋ฆฌ๋ ํ์ง ์์ ๋ฐฉ๋ฒ์ผ๋กํ์๋ ์ ์ด๋ ๊ฐ๊ฑฐ๋ ์์ข์๊ฑธ ์ฆ๋ช ํ๋ค.
12
divide and conquer ๋ถํ ์ ๋ณต
๋ฌธ์ ๋ฅผ ์์ ๋ถ๋ถ์ผ๋ก ๋๋๊ณ ๊ทธ ๋ถ๋ถ๋ค์ ์ฌ๊ท์ ์ผ๋ก ํด๊ฒฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋ถ๋ถ์ ํด๊ฒฐ์ ํฉ์ณ ํ๋์ ์๋ฃจ์ ์ผ๋ก ๋ง๋ค์ด๋ธ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ธ๋ฃจํธํฌ์ค๋ฉด O(n^2)๊ฑธ๋ฆด๊ฑธ O(n log n)์ผ๋ก ๊ฐ๋ฅํจ
merge sort
๋ฐ์ผ๋ก์ชผ๊ฐ ๋ค O(1)
์ชผ๊ฐ์ง๊ฑธ ๊ฐ๊ฐ ์ ๋ ฌํ๋ค 2T(n/2) = 2O(n/2 log n/2) = O(n log n)
๋น๊ตํ ์ ์์ ์ ๋๋ก ์์ ์กฐ๊ฐ์ผ๋ก ๊ณ์ ๋๋๋ค. ๋๊ฐ์ฉ ๋น๊ตํ ์ ์๊ฒ33
T(n)์ ์ฌ๊ท์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ํ๋. n์ด ๊น์ด? ์ธ๊ฑฐ๊ฐ์ ๊ฑ Oํ๊ธฐ๋ฒ์ผ๋ก๋ฐ๊พธ๋ฉด O(n log n)์ด ๋๋ค.
์ ๋ ฌ๋์ชผ๊ฐ๋ฆฌ๋ฅผ ํฉ์น๋ค(merge) O(n)
ํต์ํธ๋ divideํ๋ ๋ฐฉ์์ผ๋ก์ธํด divide๊ฐ ๋๋ฆฌ์ง๋ง merge๋ divide๋ ๋น ๋ฆ(๋ฌด์กฐ๊ฑด์ค๊ฐ)
merge๋ ์์ ์์ญ์ ํตํด์ ์ด๋ค์ง๋๋ฐ ๊ตณ์ด ์ด๋ ๊ฒ ์ํ๊ณ ์ถ์ผ๋ฉด ์ํ๋ ๋ฐฉ๋ฒ๋ ์๊ธดํ๋ค..
Inversion counting
๋ญํน์์ : ๋๋ i๊ฐ j๋ณด๋ค ๋ญํน์ด ๋์๋ฐ, ์ค๋ j๊ฐ i๋ณด๋ค ๋ญํน์ด ๋์ ๋ i๋ j๊ฐ ์ญ์ ๋๋ค๊ณ ํจ ๋ธ๋ฃจํธํฌ์ค๋ก ๋น๊ตํด์ ์ฐพ๋๋ฐฉ๋ฒ์ด ์์ง๋ง ์๊ฐ๋ณต์ก๋ O(n^2)์โฆ
์ด๊ฒ๋ ๋๋ ์์๊ฐํ์ ์ด๋ง์ด์ผ~
์ด๊ฑธ ๋ค์ ํ๋๋ก ํฉ์ณ์ ๋ ๋๋ฆฐ๋ค. (sort and count + sort and count + merge and count)
๊ธฐ๋ณธ์ ์ผ๋ก merge sort๋ ๊ฐ๋ค.
๋๋ ์ ๊ฐ ๋๋ ์ง ๋ถ๋ถ์์ inversion์ ๊ตฌํ๊ณ (๊ตฌํ์ผ๋ฏ๋ก ํ์ชฝ์ ์ ๋ ฌ๋์ด์๋ค๊ณ ๋ด๋ ๋ฌด๋ฐฉ) ๊ฐ ํํธ๋ณ๋ก ํฉ์ณ์ง๋ค๊ณ ํ์ ๋ inversion์ ๋ ๊ตฌํ๋ค.
closest pair
ํ๋ฉด์ ์ฃผ์ด์ง n๊ฐ์ ์ ์์ ๊ฐ์ฅ ์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๋ ์์ ์ฐพ๊ธฐ
๋ชจ๋ ์๋ค์ ๋ค ๊ฒ์ฌํ๋ฉด ๋จ. ์๊ฐ๋ณต์ก๋ O(n^2) ๊ฐ๋ฅ?ใ ใ
ํด๊ฒฐ๋ฒ : ๋๊ฐ n/2์ ๋ค๋ก ๋๋๋๋ก ํ๋ฉด์ ์๋ผ์ ๊ฐ ์ชผ๊ฐ๋ฆฌ์์ ์ ์ผ ์งง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๊ณ ๊ทธ ๋์ ๋น๊ตํด์ ๋ ์งง์๊ฑธ ์ฐพ์. ๊ทธ๋ผ mergeํ ๋ merge๋ ์ฌ์ด์์ ๊ทธ ์งง์ ๊ธธ์ด๋ณด๋ค ์งง์๊ฒ ์๋์ง ์ฐพ์ผ๋ฉด ๋จ
์๋ฌด๋ฆฌ๊ธธ์ด๋ด์ผ ๋๋ ์ ๊ธฐ์ค์ผ๋ก ์ข์ฐ ๋ธํ๋งํผ ๋ฒ์ด๋์ง ์์. ๊ทธ๋ฆฌ๊ณ ์ด ๋ธํ ๋ฐด๋ ์์์(๋ถ๋ฆฌ์ ์x์ขํ๊น์ง์ ๊ฑฐ๋ฆฌ๊ฐ delta๋ณด๋ค ์์ ์ ๋ค) ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ ์ฐพ๊ธฐ์ํด์ y๋ก ์ ๋ ฌ์ ์ํจ๋ค. ์ด๋ ๊ฒ ์ ๋ ฌ์ํจ ํ์๋ ์๋ฌด๋ฆฌ ๊ฐ๊น์ด ์ ์ด ์ฃผ๋ณ์ ๋ง์๋ด์ผ ์ต๋ 7๊ฐ๊ฐ ์๋ค. ๋ฐ๋ผ์ y๋ก ์ ๋ ฌ์ํจ ์ํ์์ ๊ทผ์ฒ์ 7๊ฐ์ ๋ํด์ ๋ชจ๋ ์กฐ์ฌํ๋ค.
13
Greedy : ํด๋ฒ์ ์ ์ฐจ ์ฐพ์๊ฐ๋ค. ๋งค ์ํฉ ์ต์ ์ ์ ํ
Divide and conquer : ๋ฌธ์ ๋ฅผ ์์ ํ์๋ฌธ์ ๋ก ๋๋์ด ํด๊ฒฐํ๋ค ์๋ฃจ์ ์ ํฉ์น๋ค
Dynamic programming : ํ์ ๋ฌธ์ ์ ์ฐ์์ผ๋ก ๋ง๋ ๋ค. ์์๋ฌธ์ ์ ์ด์๋ถ์ด ํฐ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋๊ฐ๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ๊ท ํ๋ก๊ทธ๋จ์ ์๊ฐ๋ณต์ก๋๊ฐ ์ฐ๋ ๊ธฐ๋ค. ํผ๋ณด๋์น์์ด ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์๊ฐ๋ณต์ก๋๋ ์ง์์ ์ด๋ค.
๊ทธ๋ ๊ฒ ์ฌ๊ท์ ์ผ๋ก ๋์ํ๋ฉด ์ฌ์ค ์๊ฐ๋ณด๋ค ์ด๋ฏธ ๊ณ์ฐ๋ ๊ฐ์ ๋ค์ ๊ณ์ฐํ๋ ์ค๋ณต ๊ณ์ฐ์ด ๊ต์ฅํ ๋ง์ด ์ผ์ด๋๋ค.
๋ฐ๋ผ์ ์ค๋ณต๊ณ์ฐ๋ง ๋ง์์ค๋ ์์ฒญ๋๊ฒ ์๊ฐ์ด ํ๋ณต๋จ. ์ ํ์ ์ธ ์๊ฐ๋ณต์ก๋๊ฐ๋๋ค.
public int fibo(int n ){
for(int i = 0; i < n; i++){
memoizedFibo[i] = -1;
}
memoizedFibo[0] = 0;
memoizedFibo[1] = 1;
return fiboByMemoization(n);
}
private int fiboByMemoization(int n){
if(memoizedFibo[n] < 0){
memoizedFibo[n] = fiboByMemoization(n - 2) + fiboByMemoization(n - 1);
}
return memoizedFibo[n];
}
weighted interval scheduling
๊ธฐ์กด์ interval scheduling๊ณผ ์ ์ฌํ์ง๋ง ๊ฐ job์ weight์ด ์๋ค. ๋จ์ํ ์๊ฒน์น๋๊ฑธ๋ก ๋์ด ์๋๋ผ, ๊ฒน์น์ง ์์ผ๋ฉด์ ์ต๋์ weight ์ด ํฉ์ ๋ง๋๋ ๊ฒ์ด ๋ชฉํ๋ค.
๊ธฐ์กด interval scheduling์ ๊ฐ job์ด ๋๋๋ ์๊ฐ์ผ๋ก greedyํ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๋ฉด ๊ฐ๋จํ ํด๊ฒฐ๋์. ๊ทธ๊ฑด weighted์์ ๋ชจ๋ job์ weight์ด ๋์ผํ๋ค๊ณ ๊ฐ์ ํ ๋์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ค.
๊ธฐ์กด ๋ฐฉ์์ด ์ํตํ๋๊ฑด ๋๋ฌด ์๋ช ํ๋ค. ์ผ์ฐ๋๋๋๊ฑด weight์ด 1์ด๊ณ ๋ฆ๊ฒ๋๋๋๊ฑด 999๋ผ๊ณ ๊ฐ์ ํด๋ณด์โฆ.
job๋ค์ ๊ธฐ์กด์ฒ๋ผ ๋๋๋ ์๊ฐ ์์ผ๋ก ์ ๋ ฌํ ๋ p(j)๋ฅผ j๋ฒ์งธ job๊ณผ compatibleํ ๊ฐ์ฅ ๊ฐ๊น์ด job์ ๋ฒํธ๋ฅผ i๋ผ ํ๋ฉด j๋ i๋ณด๋ค ์์ job๋ค๊ณผ compatibleํ๋ค.
์๋ฅผ๋ค๋ฉด p(8)์ 5๋ฒ์งธ job๋ถํฐ ํธํ์ด๋๊ณ , p(7)์ 3๋ฒ์งธ๋ถํฐ ํธํ์ด๋๋ค.
j๋ฒ์งธ ๊น์ง์ ์๋ฃจ์ ์ค ๊ฐ์ฅ optimalํ๊ฑธ opt(j)๋ฅผ ํตํด ์ ์ ์๋ค๊ณ ํ์.
opt(8)์ด 8๋ฒ์งธ๋ฅผ ๋ฌด์กฐ๊ฑด ์ ํํ๋ค๊ณ ๊ฐ์ ํ๋ฉด, 8๊น์ง์ ์ต์ ์ ์ ํ์ opt(5) + 8๋ฒ์งธ job์ด ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ๋ง์ฝ์ opt(8)์ด 8๋ฒ์งธ๋ฅผ ์ ํ ์ํ๋ค๊ณ ํ๋ฉด..? ๊ทธ๋ผ ๊ฐ๋จํ๊ฒ 7์ ์ ํํ๋ค๊ณ ๋ค์ ๊ฐ์ ํ๋ค. ๋ ์๋๋ฉด 6์ ๊ณ ๋ฅด๋ฉด๋๋๊น
์ด๋ ๊ฒ ํ๋ฉด ๋๋๋ฐ ์ด๊ฑธ ์ฌ๊ท๋ก ํ๋ฉด ์ง์์ ์ผ๋ก ๊ผฌ์ธ๋ค. ์ด๋ฏธ ํ๊ณ์ฐ ๋ํ๊ณ ๋ํ๊ณ ..์ฝ์งํจ
๊ทธ๋์ memoization์ ๋์ ํ๋ค.
n๊ฐ์ ์ต์ ์ ๋ต์ ์ ์ฅํ ๊ณต๊ฐ์ ๋ง๋ จํด์ ๊ณ์ฐ๋๋ ๊ฐ๋ค์ ์ ์ฅ, ๊ณ์ฐ๋๊ฐ์ด ์์ผ๋ฉด ๊ฐ์ ธ๋ค์ฐ๊ณ ์์ผ๋ฉด ๊ณ์ฐํด์ ์ ์ฅํ๋๋ก ํ์ฌ ์ค๋ณต๊ณ์ฐ์ ๋ง๋๋ค.
๊ทธ๋ผ O(n log n)์ ์๊ฐ์ ์์ํ๋ค. โ ์ ๋ ฌํ๋๋ฐ ์๊ฐ ๋ค ์ฐ๋๋ณธ๋ฐ ใ ใ ใ ใ
์ด์ง ํ์์ ์ด์ฉํด์ p()๋ฅผ ์ํํ๋ค. mid์ finish๊ฐ target์ start์ ๊ฐ๊ฑฐ๋ ์์ผ๋ฉด left๋ฅผ mid + 1๋ก ์ฎ๊ฒจ๊ฐ๋ฉฐ, mid์ finish๊ฐ target์ start๋ณด๋ค ํฌ๋ค๋ฉด right๋ฅผ mid -1 ๋ก ๋ด๋ ค๊ฐ๋ฉฐ ์ด์งํ์ํ๋ค๊ฐ left๋ right๊ฐ ๋ง๋๊ฑฐ๋ left๊ฐ right๋ฅผ ๋์ด์๋ ์๊ฐ์ด ๋ฑ ์๋ง์๊ฑฐ์ ์ด์งํ์์ด๋๊น O(n log n)
8์ optimal์ ์ฐพ๋๊ฑฐ๋๊น 8์ ์ ์ธํ๊ณ 1-7์์ ํ์ โ 5-7ํ์ โ 5-5ํ์ ์์ผ๋ก ๊ฐ๋ค.
OBST
์ต์ ์ ์ด์งํธ๋ฆฌ๋ ์ง๊ธ๊น์ง ๋์ด๊ฐ ๋ฎ์ ํธ๋ฆฌ๋ผ๊ณ ํ๋ฐ. ๊ทผ๋ฐ ๊ทธ๊ฑด ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ ํ๋ฅ ์ด ๊ฐ๋ค๊ณ ๊ฐ์ ํ์ ๋ ์ด์ผ๊ธฐ
ํธ๋ฆฌ์ ํ์์ ์คํจํ ๊ฒฝ์ฐ์ ๋ํด์ ๊ณ ๋ ค๋ฅผ ํด๋ณด์์ผ ํ๋ค.
ํธ๋ฆฌ์ ๊ฒ์์ ์คํจํ ๊ฒฝ์ฐ ๊ฐ ๊ณณ์ด ์๋ค. ๊ทธ ๊ฐ ๊ณณ์ ๋ง๋ค์ด์ ์ธ๋ถ๋ ธ๋ ํน์ ์คํจ๋ ธ๋๋ผ๊ณ ๋ช ๋ช ํด์ค๋ค. ๊ทธ๋ผ ์ค๋ฆฌ์ง๋ ํธ๋ฆฌ์ ๋ ธ๋๋ค์ ๋ด๋ถ๋ ธ๋๋ผ๊ณ ํ ์ ์๊ณ , ์ด ์คํจ๋ ธ๋ ํน์ ์ธ๋ถ๋ ธ๋๊น์ง ํฌํจํ ํธ๋ฆฌ๋ฅผ ํ์ฅ์ด์งํธ๋ฆฌ๋ผ๊ณ ๋งํด์ค ์ ์๋ค.
์ธ๋ถ ๋ ธ๋๋ก์ path์ ์ด ํฉ์, ๋ด๋ถ๋ ธ๋๊ฐ์์ ๋๋ฐฐ์ ๋ด๋ถ๋ ธ๋์ pathํฉ๊ณผ ๊ฐ๋ค.
E = I + 2n โ ๋ ธ๋์ ๊ฐ์๋ ์์์ด๋ฏ๋ก ๊ณ ์ ์ ์ด๊ณ path์ธ I๋ฅผ ์ต๋ํ ์ค์ด๋๊ฒ์ด E๋ฅผ ์ค์ด๋ ๋ฐฉํฅ์ด๋ค. ๋ฐ๋ผ์ ์ต์ ์๊ฒฝ์ฐ๋ skewed tree : O(n^2), ์ต์ ์ ๊ฒฝ์ฐ๋ complete binary tree (O(n log n)๊ฐ ๋๋ค.
ํ์์ ์ฑ๊ณตํ ํ๋ฅ ๊ณผ ์คํจํ ํ๋ฅ ์ ํด๋น ๋ ธ๋์ ๋๋ฌํ๋๋ฐ ํ์ํ ๊ฒฝ๋ก์ ์์ ๊ณฑํ๊ฒ์ ์ด ํฉ
๋ฐ๋ผ์ ์ฐพ์ํ๋ฅ ๊ณผ ๋ชป์ฐพ์ํ๋ฅ ์ด ๋ชจ๋ ๋์ผํ๋ค๊ณ ์น๋ฉด ๊ทธ๋ฅ ๋ฉ์ํ ํธ๋ฆฌ๊ฐ ์ต๊ณ ๋ค.
๊ทธ๋ฌ๋ ๊ทธ๋ ์ง ์๋ค๋ฉด..
๊ณ์ฐ๊ณต์์ ์์ ๊ฐ๋ค. ๊ทผ๋ฐ ์ฌ๊ธฐ์ ์ด๋ป๊ฒ ํธ๋ฆฌ๋ฅผ ๋์ด๋ด์ง?
14
๊ทธ๋ํ์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋ Shortest paths ์ฐพ๊ธฐ์์ ์ฐ๋ฆฌ๋ edge์ ๊ฐ์ด ์์ ๊ฐ์ง๋ฉด ๋ถ๊ฐ๋ฅํ๊ฑธ๋ก ํ์๋ค. ๋ค์ต์คํธ๋ผ๋ก ํ๋ฉด ๋ถ๊ฐ๋ฅํ๋ค. ํน์ ๋ค๋ฅธ๋ฐฉ์, ๋ชจ๋ weight๋ฅผ ์์๊ฐ๋๋๋ก ๋ค ๋ํด์ฃผ๊ณ ํ๋๊ฒ๋ ๋ฌธ์ ๊ฐ์์.
๋ค์ต์คํธ๋ผ REVIEW ๊ฐ์ฅ ์งง๊ฒ๊ฐ ์ ์๋๊ฑธ ์ ํ, ์ ํ๋์ ๋ค๋ก cost๋ฅผ ์ ๋ฐ์ดํธ, ์ ๋ฐ์ดํธ๋ cost ์ค ๋ ์งง๊ฒ๊ฐ ์ ์๋๊ฑธ ์ ํ, ์ด๊ฑธ ๋ฐ๋ณต. ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ผ์ข
path์ ์๋ฅผ #of nodes - 1๋ก ์ ํํ๊ณ ์์ cost๊ฐ ๋์ค์ง ์๋๋ก ํ๋ค๋ฉด? DP๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
v โ t๋ก k๋ฒ ๊ฑฐ์ณ์ ๊ฐ๋ ์ต์ ์ cost๊ฐ Opt(k, v)๋ผ๊ณ ํ์
์ข ์ด๋ฅผ ํ์ธํ๋๋ก ํ์
์๊ฐ๋ณต์ก๋ O(mn), ๊ณต๊ฐ๋ณต์ก๋ O(n^2)
- OBST ๊ตฌํ๊ธฐ
- Huffman ๊ตฌํ๊ธฐ
- ๊ฐ๋
๋ฌธ์ 3๊ฐ์ง์ ๋
interval scheduling(๋ค์ weighted๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋์ฌ ๊ฒ ๊ฐ์)optimal 2-way merge(huffman code๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋์ฌ ๊ฒ ๊ฐ์merge sort(inversion counting์ด ์์ด์ ์๋์ฌ๊ฒ๊ฐ์)- inversion counting
- weighted interval scheduling
- closet path
- inversion counting
- Huffman, closest pair, quick sort ๋ฑ ์ค์ต์์ ํ๋ฌธ์
- ์์ฉ์ฝ๋ฉ ๋ฌธ์
Comments