Data Structures
Array & ArrayList & LinkedList
Array์ LinkedList์ ๋น๊ต์ด๋ค.
โจ Array
๋ฐฐ์ด์ด๋ฉฐ, ๋ ผ๋ฆฌ์ ์ ์ฅ์์์ ๋ฌผ๋ฆฌ์ ์ ์ฅ์์๊ฐ ์ผ์นํ๋ค.
ํน์ ์๋ฃํ๋ค์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์์์ ์ฐ์์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
immutableํ๋ค.
์ธ๋ฑ์ค๋ก ํด๋น ์์์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ธ๋ฑ์ค๋ฅผ ์๊ณ ์๋ค๋ฉด O(1)์ ์๊ฐ ๋ณต์ก๋๋ก ์์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ์ฆ,
Random Access๊ฐ ๊ฐ๋ฅํ๋ค.์ญ์ ๋๋ ์ฝ์ ๊ณผ์ ์์๋ ํด๋น ์์์ ์ ๊ทผํ์ฌ ์์ ์ ์๋ฃํ ๋ค, shiftํด์ค์ผ ํ๋ฏ๋ก ๋น์ฉ์ด ๋ฐ์ํ๋ค. O(n)
๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ์ฉ์ ์ ์ฝ์ด ์๋ค.
โจ LinkedList
๋ฐ์ดํฐ ๊ฒ์ ์ ์ฒ์ ๋ ธ๋๋ถํฐ ์ํํด์ผ ํ๋ค. ์ด์ ๋ ๋ ผ๋ฆฌ์ ์ ์ฅ ์์์ ๋ฌผ๋ฆฌ์ ์ ์ฅ ์์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. O(n)
๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์์์ ๊ฐ ๋ ธ๋๋ค์ด ์ฐ์์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ง ์๊ณ ํฉ์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ๋ ธ๋๊ฐ ์์ ์ ๋ค์ ๋ ธ๋์ ์์น๋ฅผ ์๊ณ ์๋ ํํ์ด๋ค.
๊ฐ ๋ ธ๋๋ค์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์์ ์ด๋์ ์์นํ๋์ง๋ ๊ฐ๊ฐ์ ๋ ธ๋๋ค๋ง ์๊ณ ์๊ณ , ์ฌ์ฉ์๋ ์ ์ผ ์ฒซ ๋ฒ์งธ ๋ ธ๋์ ์์น๋ง ์๊ณ ์๋ ์ํ์ด๋ค.
์ด๋ค ์์๋ฅผ ์ฝ์ , ์ญ์ ์ ๊ทธ ์์๋ฅผ ์ฐพ๊ธฐ ์ํด O(n)์ ์๊ฐ์ด ๋ฐ์ํ๊ณ ์ถ๊ฐ์ ์ผ๋ก ์์ ์ ์๋ฃํ๋ ์๊ฐ๊น์ง O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
๊ฒฐ๊ตญ, LinkedList๋ ๊ฒ์๊ณผ ์ฝ์ , ์ญ์ ๊ณผ์ ๋ชจ๋ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
โจ Dynamic Array(ArrayList)
์ด๋ฆ์ฒ๋ผ ๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๊ณ ์์ด ๋ฐ์ดํฐ ๊ฒ์์ ์ ํฉํ๊ณ ์๋๊ฐ ๋น ๋ฅด๋ค.
์๊ฐ ๋ณต์ก๋ : O(1)
๋ฐ์ดํฐ์ ์ฝ์ , ์ญ์ ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ๋ฐฐ์ด์ ์์ฑํด ๋ณต์ฌํ๋ฏ๋ก ์ฝ์ , ์ญ์ ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ ์๋๊ฐ ๋๋ฆฌ๋ฉฐ ๋ถ์ ํฉํ๋ค.
์๊ฐ ๋ณต์ก๋ : O(n)
๋๊ธฐํ๋ฅผ ์ง์ํ์ง ์์ Vector๋ณด๋ค ๋น ๋ฅด๋ค.
โจ ๋ฐ์ดํฐ ์ ๊ทผ ์๋
Array
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ์ ๊ทผํ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๋ O(1)์ด๋ค.
Random Access๊ฐ ๊ฐ๋ฅํ๋ค.
LinkedList
ํน์ ์์์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ์ฒ์๋ถํฐ ์์ฐจ์ ์ผ๋ก ๊ฒ์ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๋ O(N)์ด๋ค.
โจ๋ฐ์ดํฐ ์ฝ์
์๋
Array
๋ฐ์ดํฐ๋ฅผ ์ค๊ฐ์ด๋ ๋งจ ์์ ์ฝ์ ํ ๊ฒฝ์ฐ, ์ดํ์ ๋ฐ์ดํฐ๋ฅผ Shiftํด์ผ ํ๋ฏ๋ก ์ถ๊ฐ ๊ณผ์ ๊ณผ ์๊ฐ์ด ์์๋๋ค.
๋ฐ๋ผ์ ๋ฐ์ดํฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ, ๋นํจ์จ์ ์ด๋ค.
O(N)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
LinkedList
์ค๊ฐ ์ฝ์ ์์ด ๋งจ ์๊ณผ ๋งจ ๋ค์๋ง ์ฝ์ ํ๋ค๋ฉด O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
๊ทธ๋ ์ง ์๋ค๋ฉด ์ฝ์ ํ ์์น๋ฅผ ์ฐพ๊ณ (O(N))๊ณผ ์ฝ์ ์ฐ์ฐ์ ์งํํ๊ธฐ ๋๋ฌธ์ O(N)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ Array๋ณด๋ค ๋น ๋ฅธ ์ฑ๋ฅ์ ๊ฐ๋๋ค.
Array์ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ์ฌ ๋ชจ๋ ๊ณต๊ฐ์ด ๊ฝ ์ฐจ๊ฒ ๋๋ฉด ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ ์ฎ๊ฒจ์ผ ํ์ง๋ง, LinkedList๋ฅผ ๊ทธ๋ด ํ์๊ฐ ์๋ค. ์ถ๊ฐํ ๋๋ง๋ค ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ๋๋ค.
โจ ๋ฐ์ดํฐ ์ญ์ ์๋
Array
๋ฐ์ดํฐ ์ญ์ ์ ๊ฒฝ์ฐ, ๊ทธ ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ํ ์ ์ฒด์ ์ผ๋ก Shiftํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ O(N)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
LinkedList
์ญ์ ํ ์์๋ฅผ ์ฐพ๊ธฐ ์ํด O(N)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๊ณ ์ญ์ ํ๋ค. ํ์ง๋ง, Array๋ณด๋ค ๋น ๋ฅด๊ฒ ์ญ์ ์ฐ์ฐ์ ์ํํ๋ค.
โจ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
Array
๋ฉ๋ชจ๋ฆฌ์๋ Array๊ฐ ์ ์ธ๋์ ๋ง์ Compile time์ ํ ๋น๋์ด ์ง๋ค.
์ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด๋ผ๊ณ ํ๋ค.
LinkedList
๋ฉ๋ชจ๋ฆฌ๋ ์๋ก์ด Node๊ฐ ์ถ๊ฐ๋ ๋ runtime์ ํ ๋น๋์ด ์ง๋ค.
๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด๋ผ๊ณ ํ๋ค.
โจ ๊ฒฐ๋ก
์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๋น๋ฒํ๊ฒ ์ผ์ด๋๋ค๋ฉด LinkedList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ฒ์ด ๋น๋ฒํ๊ฒ ์ผ์ด๋๋ค๋ฉด Array๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ฐ์ดํฐ์ ๊ฒ์์ด ์ฃผ๊ฐ ๋๋ ๊ฒฝ์ฐ์๋ Dynamic Array(ArrayList)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ข๋ค.
๋ฐ์ดํฐ์ ์ฝ์ , ์ญ์ ๊ฐ ๋น๋ฒํ๋ค๋ฉด Dynamic Array(ArrayList)๋ณด๋ค๋ LinkedList๋ฅผ ์ฌ์ฉํ๋ ํธ์ด ๋ซ๋ค.
Stack & Queue (์คํ & ํ)
์คํ๊ณผ ํ๋ ์ ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
โจ Stack
๋์ค์ ๋ค์ด๊ฐ ์์๊ฐ ๋จผ์ ๋์ค๋ ๊ตฌ์กฐ์ด๋ค.
LIFO(Last in First Out)์ ๊ตฌ์กฐ.
์๋๋ก์ด๋์ ์กํฐ๋นํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์คํ์ด ์ฌ์ฉ๋๋ค.
์๊ฐ ๋ณต์ก๋ : O(n)
๊ณต๊ฐ ๋ณต์ก๋ : O(n)
์ธ์ ์ฌ์ฉ? ํจ์์ ์ฝ ์คํ, ๋ฌธ์์ด ์ญ์ ์ถ๋ ฅ, ์ฐ์ฐ์ ํ์ ํ๊ธฐ๋ฒ ๋ฑ
โจ Queue
๋จผ์ ๋ค์ด๊ฐ ์์๊ฐ ๋จผ์ ๋์ค๋ ๊ตฌ์กฐ์ด๋ค.
FIFO(First in First out)์ ๊ตฌ์กฐ.
ํ๋ ํ์ฉ ๋ถ์ผ๊ฐ ๋๊ฒ ๋ง๋ค. ์๋๋ก์ด๋์ ๊ฒฝ์ฐ, ๋ฃจํผ์ ๋ฉ์์ง ํ๊ฐ ์์ ์ค ํ๋์ด๋ค.
์๊ฐ ๋ณต์ก๋ : O(n)
๊ณต๊ฐ ๋ณต์ก๋ : O(n)
์ธ์ ์ฌ์ฉ? ๋ฒํผ, ๋ง๊ตฌ ์ ๋ ฅ๋ ๊ฒ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๊ณ ์๋ ์ํฉ, bfs ํ์ ๋ฑ
โจ 2๊ฐ์ ์คํ์ผ๋ก ํ ๊ตฌํ
๊ฐ๋ ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฉด์ ์์ ๋์จ๋ค๊ณ ํ๋ค. ์ด๋ ต๋ค๊ณ ์๊ฐํ๋๋ฐ, ๊ทธ๋ฆฌ ์ด๋ ต์ง ์๊ณ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค.
inbox์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ค(push) -> A,B
inbox์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ(pop)ํ์ฌ outbox์ ์ฝ์ (push) ํ๋ค. -> B,A
outbox์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ(pop)ํ๋ค. -> A,B ์์ผ๋ก ์ถ๋ ฅ๋๋ค.
์ฆ, inbox ์คํ์ A,B ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ฉด ์์ ๊ทธ๋ฆผ์ฒ๋ผ ์คํ์ ๋ฐ์ดํฐ๊ฐ ์์ธ๋ค. ๊ทธ๋ฆฌ๊ณ inbox ์คํ์ ์๋ ๋ฐ์ดํฐ๋ฅผ popํด์ outbox๋ก ์ฎ๊ธด๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด outbox์๋ B,A ์์๋ก ๋ฐ์ดํฐ๊ฐ ์์ธ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ outbox ์คํ์ ์๋ ๋ฐ์ดํฐ๋ฅผ popํ๊ฒ ๋๋ฉด A,B ์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ถ๋ ฅ๋๋ค.
โจ Stack ๊ตฌํ
TODO
โจ Queue ๊ตฌํ
TODO
Tree(ํธ๋ฆฌ)
โจ ํธ๋ฆฌ์ ๊ฐ๋
ํธ๋ฆฌ๋ผ๋ ์ด๋ฆ์ด ๋์จ ์ด์ ๋ ์ค์ ๋๋ฌด๋ฅผ ๊ฑฐ๊พธ๋ก ์ธ์๋์ ๋ฏํ ๋ชจ์์ด๋ผ์ ํธ๋ฆฌ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ ํ ์๋ฃ๊ตฌ์กฐ์์ ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ ๋ฑ๋ ์กด์ฌํ์ง๋ง, ํธ๋ฆฌ๊ฐ ๋์จ ์ด์ ๋ ๋ญ๊น?
์ผ๋ฐ ๋ฐฐ์ด์์ ์ฝ์ ์ด๋ ์ญ์ ๋ฅผ ํ๋๋ฐ O(N)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์์์ ์ฝ์ ํ๋ ๊ฒฝ์ฐ ๋๋จธ์ง ๋ชจ๋ ์์๋ค์ ํ ์นธ์ฉ ๋ค๋ก ๋ฏธ๋ค์ผ ํ๋ฏ๋ก ์ต์ ์ ์๊ฐ ๋ณต์ก๋ O(N)์ด ๋์จ๋ค. ํ์ง๋ง, ํธ๋ฆฌ๋ ํธํฅ ํธ๋ฆฌ๊ฐ ์๋ ์ด์ ์ผ๋ฐ์ ์ธ ํธ๋ฆฌ์์๋ O(log N) ์ ๋์ ์๊ฐ์ผ๋ก ์ค์ฌ์ง๋ค.
๋ํ ํธ๋ฆฌ๋ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋ ๊ฒฝ์ฐ์ ๊ต์ฅํ ์ข๋ค.
ํ์ฌ์ ์กฐ์ง๋๋ฅผ ์๊ฐํด๋ณด๋ฉด, ๋งจ ์์ ํ์ฅ๋, ์ฌ์ฅ๋์ด ์๊ณ , ๋ถ์๋ณ, ํ๋ณ๋ก ๊ฐ๊ฐ ํธ๋ฆฌ๊ฐ ์๊ธธ ๊ฒ์ด๋ค. ์ด๋ฐ ๊ฒฝ์ฐ, ์ํ๋ ๋ถ์๋ฅผ ํ๊ณ ๋ด๋ ค๊ฐ๊ธฐ๋ง ํ๋ฉด ๋๋ฏ๋ก ๋ค๋ฅธ ์๋ฃ ๊ตฌ์กฐ๋ณด๋ค ์ฐพ๊ธฐ๊ฐ ํจ์ฌ ์ฌ์ธ ๊ฒ์ด๋ค.
โจ ํน์ง
Tree๋ Stack์ด๋ Queue์ ๊ฐ์ด ์ ํ ๊ตฌ์กฐ๊ฐ ์๋ ๋น์ ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๊ณ์ธต์ ๊ด๊ณ๋ฅผ ํํํ๋ค.
๋ฃจํธ ๋ ธ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๋ ๋จ ํ๋์ ๋ถ๋ชจ ๋ ธ๋๋ง์ ๊ฐ๋๋ค.
โจ ํธ๋ฆฌ์ ๊ตฌ์ฑ ์์
Node : ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ๊ฐ์ ์์.
Edge : ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ๋ ธ๋์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ .
Root Node : ํธ๋ฆฌ ๊ตฌ์กฐ์์ ์ต์์์ ์๋ ๋ ธ๋.
Terminal Node : ํ์์ ๋ค๋ฅธ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์์ ๋ ธ๋.
Internal Node : ๋จ๋ง ๋ ธ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๋ก ๋ฃจํธ ๋ ธ๋๋ฅผ ํฌํจํ๋ค.
โจ Binary Tree(์ด์ง ํธ๋ฆฌ)
๋ฃจํธ ๋ ธ๋๋ฅผ ์ค์ฌ์ผ๋ก ๋ ๊ฐ์ ์๋ธ ํธ๋ฆฌ๋ก ๋๋์ด ์ง๋ค. (๋ ธ๋๊ฐ ์์ ์๋ ์๋ค.) ๋๋์ด์ง ๋ ์๋ธ ํธ๋ฆฌ๋ ๋ชจ๋ ์ด์ง ํธ๋ฆฌ์ด์ผ ํ๋ค.
๊ฐ ์ธต๋ณ๋ก ์ซ์๋ฅผ ๋งค๊ฒจ์ ์ด๋ฅผ ํธ๋ฆฌ์ ๋ ๋ฒจ์ด๋ผ๊ณ ํ๋ค. ๋ ๋ฒจ์ 1๋ถํฐ ์์ํ๊ณ ๋ฃจํธ ๋ ธ๋์ ๋ ๋ฒจ์ 1์ด๋ค. ํธ๋ฆฌ์ ์ต๊ณ ๋ ๋ฒจ์ ๊ฐ๋ฆฌ์ผ ํธ๋ฆฌ์ ๋์ด๋ผ๊ณ ํ๋ค.
์ข ๋ฅ
Full Binary Tree(ํฌํ ์ด์ง ํธ๋ฆฌ) : ๋ชจ๋ ๋ ๋ฒจ์ด ๊ฝ ์ฐฌ ์ด์ง ํธ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
๋ ๋ฒจ ๋ณ๋ก ๋ ธ๋์ ๊ฐ์๊ฐ 1,2,4,8,16 ... ์ผ๋ก ๋์ด๋๋ค. ๋ฐ๋ผ์ ์ผ๋ฐ์ ์ธ ์ด์งํธ๋ฆฌ์์ ๊ฐ ๋ ๋ฒจ ๋ณ ์ต๋ ๋ ธ๋์ ๊ฐ์๋ 2^(k - 1)์ด ๋๋ค.
๋ ๋ฒจ ๋ณ ๋ ธ๋๋ ๊ณต๋น๊ฐ 2์ธ ๋ฑ๋น ์์ด์ด๋ผ๊ณ ๋ณผ ์ ์์ผ๋ฏ๋ก ๋ฑ๋น์์ด์ ํฉ์ผ๋ก ์๊ฐํ๋ฉด ๋์ด๊ฐ h์ธ ์ด์งํธ๋ฆฌ๊ฐ ๊ฐ์ง ์ ์๋ ์ต๋ ๋ ธ๋ ์๋ 2^h - 1์ด๋ผ๊ณ ํ ์ ์๋ค.
Complete Binary Tree(์์ ์ด์ง ํธ๋ฆฌ) : ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์์๋๋ก ์ฐจ๊ณก ์ฐจ๊ณก ์ฑ์์ง ์ด์ง ํธ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
๋ ธ๋๋ฅผ ์ฝ์ ํ ๋ ์ผ์ชฝ๋ถํฐ ์ฐจ๋ก๋๋ก ์ฝ์ ํ๋ ํธ๋ฆฌ์ด๋ค. ์ผ์ชฝ์ด ๋น์ด์๊ณ ์ค๋ฅธ์ชฝ์ด ๋ค์ด๊ฐ์๋ ํธ๋ฆฌ๋ ์์ ์ด์ง ํธ๋ฆฌ๊ฐ ์๋๋ค.
Skewed Binary Tree(ํธํฅ ์ด์ง ํธ๋ฆฌ) : ๋ชจ๋ ๋ ธ๋๊ฐ ๋ถ๋ชจ์ ์ผ์ชฝ ์์์ด๊ธฐ ๋๋ฌธ์ ์ผ์ชฝ์ผ๋ก ํธํฅ๋์ด ์๊ฑฐ๋ ๋ฐ๋๋ก ๋ชจ๋ ๋ ธ๋๊ฐ ๋ถ๋ชจ์ ์ค๋ฅธ์ชฝ ์์์ด๊ธฐ ๋๋ฌธ์ ์ค๋ฅธ์ชฝ์ผ๋ก ํธํฅ๋์ด ์๋ ์ด์ง ํธ๋ฆฌ๋ฅผ ๋งํ๋ค.
B Tree & B+ Tree
์ด์ง ํธ๋ฆฌ๋ ํ๋์ ๋ถ๋ชจ๊ฐ ๋ ๊ฐ์ ์์๋ฐ์ ๊ฐ์ง์ง ๋ชปํ๊ณ , ๊ท ํ์ด ๋ง์ง ์์ผ๋ฉด ๊ฒ์ ํจ์จ์ด ์ ํ ๊ฒ์ ๊ธ์ผ๋ก ๋จ์ด์ง๋ค. ํ์ง๋ง ์ด์ง ํธ๋ฆฌ ๊ตฌ์กฐ์ ๊ฐ๊ฒฐํจ๊ณผ ๊ท ํ๋ง ๋ง๋ค๋ฉด ๊ฒ์, ์ฝ์ , ์ญ์ ๋ชจ๋ O(logN)์ ์ฑ๋ฅ์ ๋ณด์ด๋ ์ฅ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๊ณ์ ๊ฐ์ ์ํค๊ธฐ ์ํ ๋ ธ๋ ฅ์ด ์ด๋ฃจ์ด์ง๊ณ ์๋ค.
โจ B Tree
๋ฐ์ดํฐ ๋ฒ ์ด์ค, ํ์ผ ์์คํ ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ์ ์ผ์ข ์ด๋ค.
์ด์ง ํธ๋ฆฌ๋ฅผ ํ์ฅํด์, ๋ ๋ง์ ์์ ์์์ ๊ฐ์ง ์ ์๊ฒ ์ผ๋ฐํ ์ํจ ๊ฒ์ด B Tree.
์์ ์์ ๋ํ ์ผ๋ฐํ๋ฅผ ์งํํ๋ฉด์, ํ๋์ ๋ ๋ฒจ์ ๋ ์ ์ฅ๋๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ํธ๋ฆฌ์ ๊ท ํ์ ์๋์ผ๋ก ๋ง์ถฐ์ฃผ๋ ๋ก์ง๊น์ง ๊ฐ์ถ์๋ค. ๋จ์ํ๊ณ ํจ์จ์ ์ด๋ฉฐ, ๋ ๋ฒจ๋ก๋ง ๋ฐ์ง๋ฉด ์์ ํ ๊ท ํ์ ๋ง์ถ ํธ๋ฆฌ์ด๋ค.
Ex)
๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ ๋, ๊ฒ์ ๊ตฌ์กฐ์ ๊ฒฝ์ฐ ํ๋์ ๋ ธ๋์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ์ ์ ์๋นํ ํฐ ์ฅ์ ์ด๋ค.
๋๋์ ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ธ๋ญ ๋จ์๋ก ์ ์ถ๋ ฅํ๋ ํ๋๋์คํฌ or SSD์ ์ ์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ!
ํ ๋ธ๋ญ์ด 1024 ๋ฐ์ดํธ์ด๋ฉด, 2๋ฐ์ดํธ๋ฅผ ์ฝ์ผ๋ 1024๋ฐ์ดํธ๋ฅผ ์ฝ์ผ๋ ๋๊ฐ์ ์ ์ถ๋ ฅ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
๋ฐ๋ผ์ ํ๋์ ๋ ธ๋๋ฅผ ๋ชจ๋ 1024๋ฐ์ดํธ๋ก ๊ฝ ์ฑ์์ ์กฐ์ ํ ์ ์์ผ๋ฉด ์ ์ถ๋ ฅ์ ์์ด์ ํจ์จ์ ์ธ ๊ตฌ์ฑ์ ๊ฐ์ถ ์ ์๋ค.
B-Tree๋ ์ด๋ฌํ ์ฅ์ ์ ํ ๋๋ก ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์ธ๋ฑ์ค ์ ์ฅ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ฉํ๊ณ ์๋ค.
๊ท์น
๋ ธ๋์ ์๋ฃ์๊ฐ N์ด๋ฉด, ์์ ์๋ N+1์ด์ด์ผ ํ๋ค.
๊ฐ ๋ ธ๋์ ์๋ฃ๋ ์ ๋ ฌ๋ ์ํ์ฌ์ผ ํ๋ค.
๋ฃจํธ ๋ ธ๋๋ ์ ์ด๋ 2๊ฐ ์ด์์ ์์์ ๊ฐ์ ธ์ผ ํ๋ค.
๋ฃจํธ ๋ ธ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๋ ์ ์ด๋ M/2๊ฐ์ ์๋ฃ๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
์ธ๋ถ ๋ ธ๋๋ก ๊ฐ๋ ๊ฒฝ๋ก์ ๊ธธ์ด๋ ๋ชจ๋ ๊ฐ๋ค.
์ ๋ ฅ ์๋ฃ๋ ์ค๋ณต๋ ์ ์๋ค.
โจ B+ Tree
๋ฐ์ดํฐ์ ๋น ๋ฅธ ์ ๊ทผ์ ์ํ ์ธ๋ฑ์ค ์ญํ ๋ง ํ๋ ๋น๋จ๋ง ๋ ธ๋๊ฐ ์ถ๊ฐ๋ก ์๋ค.
๊ธฐ์กด์ B-Tree์ ๋ฐ์ดํฐ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ตฌํ๋ ์์ธ๊ตฌ์กฐ.
B-Tree์ ๋ณํ ๊ตฌ์กฐ๋ก index ๋ถ๋ถ๊ณผ leaf ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ์์ฐจ ๋ฐ์ดํฐ ๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค. ์ธ๋ฑ์ค ๋ถ๋ถ์ key ๊ฐ์ leaf์ ์๋ key ๊ฐ์ ์ง์ ์ฐพ์๊ฐ๋๋ฐ ์ฌ์ฉํ๋ค.
์ฅ์
๋ธ๋ญ ์ฌ์ด์ฆ๋ฅผ ๋ ๋ง์ด ์ด์ฉํ ์ ์๋ค. (Key ๊ฐ์ ๋ํ ํ๋๋์คํฌ ์ก์ธ์ค ์ฃผ์๊ฐ ์๊ธฐ ๋๋ฌธ)
Leaf ๋ ธ๋๋ผ๋ฆฌ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ์ฐ๊ฒฐ๋์ด ์์ด์ ๋ฒ์ ํ์์ ๋งค์ฐ ์ ๋ฆฌํ๋ค.
๋จ์
B-Tree์ ๊ฒฝ์ฐ ์ต์ ์ผ์ด์ค์์๋ ๋ฃจํธ์์ ๋๋ ์ ์์ง๋ง, B+Tree๋ ๋ฌด์กฐ๊ฑด leaf ๋ ธ๋๊น์ง ๋ด๋ ค๊ฐ๋ด์ผ ํ๋ค.
โจ ๋น๊ต
B-Tree : ๊ฐ ๋ ธ๋์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.
๊ฐ ๋ ธ๋์์ key์ data ๋ชจ๋ ๋ค์ด๊ฐ ์ ์๊ณ , data๋ disk block์ผ๋ก ํฌ์ธํฐ๊ฐ ๋ ์ ์๋ค.
B+ Tree : index ๋ ธ๋์ leaf ๋ ธ๋๋ก ๋ถ๋ฆฌ๋์ด ์ ์ฅ๋๋ค.
๊ฐ ๋ ธ๋์์ key๋ง ๋ค์ด๊ฐ๋ค. ๋ฐ๋ผ์ data๋ leaf ๋ ธ๋์๋ง ์กด์ฌํ๋ค.
add, delete ์ฐ์ฐ ๋ชจ๋ leaf ๋ ธ๋์์๋ง ์ด๋ฃจ์ด์ง๋ค.
๋ํ, leaf ๋ ธ๋๋ ์๋ก ์ฐ๊ฒฐ๋์ด ์์ด์ ์์ ์ ๊ทผ์ด๋ ์์ฐจ ์ ๊ทผ ๋ชจ๋ ์ฑ๋ฅ์ด ์ฐ์ํ๋ค.
Binary Search Tree(์ด์ง ํ์ ํธ๋ฆฌ)
โจ ์ด์ง ํ์ ํธ๋ฆฌ์ ๋ชฉ์ ์?
์ด์ง ํ์ + ์ฐ๊ฒฐ ๋ฆฌ์คํธ
์ด์ง ํ์
ํ์์ ์์๋๋ ์๊ฐ ๋ณต์ก๋๋ O(logN)
ํ์ง๋ง ์ฝ์ , ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅ.
์ฐ๊ฒฐ ๋ฆฌ์คํธ
์ฝ์ , ์ญ์ ์ ์๊ฐ ๋ณต์ก๋๋ O(1)
ํ์ง๋ง ํ์ํ๋ ์๊ฐ ๋ณต์ก๋๋ O(N)
์ด ๋ ๊ฐ์ง๋ฅผ ํฉํ์ฌ ์ฅ์ ์ ๋ชจ๋ ์ป๊ธฐ ์ํด ๊ณ ์๋ ๊ฒ์ด
์ด์ง ํ์ ํธ๋ฆฌ์ฆ, ํจ์จ์ ์ธ ํ์ ๋ฅ๋ ฅ์ ๊ฐ์ง๊ณ ์๋ฃ์ ์ฝ์ , ์ญ์ ๋ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ด๋ค.
โจ ํน์ง
์ด์ง ํธ๋ฆฌ์ ์ผ์ข ์ผ๋ก ์ด์ง ํ์ ํธ๋ฆฌ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ท์น์ด ์๋ค.
์ด์ง ํ์ ํธ๋ฆฌ์ ๋ ธ๋์ ์ ์ฅ๋ ํค๋ ์ ์ผํ๋ค.
๋ฃจํธ ๋ ธ๋์ ํค๊ฐ ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ์ด๋ ํ ๋ ธ๋์ ํค๋ณด๋ค ํฌ๋ค.
๋ฃจํธ ๋ ธ๋์ ํค๊ฐ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ์ด๋ ํ ๋ ธ๋์ ํค๋ณด๋ค ์๋ค.
์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ ์ด์ง ํ์ ํธ๋ฆฌ์ด๋ค.
ํ์์ ์๊ฐ ๋ณต์ก๋๋ O(logN)์ด๋ค. ์ต์ ์ ๊ฒฝ์ฐ, ํธํฅ ํธ๋ฆฌ๊ฐ ๋์ด O(N)์ด ๋ ์๋ ์๋ค.
์ด์ง ํ์ ํธ๋ฆฌ์ ์ํ๋ ์ค์ ์ํ(in order) ๋ฐฉ์์ด๋ค.(์ผ์ชฝ - ๋ฃจํธ - ์ค๋ฅธ์ชฝ)
์ค์ ์ํ๋ก ์ ๋ ฌ๋ ์์๋ฅผ ์ฝ์ ์ ์๋ค.
์ค๋ณต๋ ๋ ธ๋๊ฐ ์์ด์ผ ํ๋ค.
์ค๋ณต์ด ์์ด์ผ ํ๋ ์ด์ ๋??
๊ฒ์์ ๋ชฉ์ ์ผ๋ก ํ๋ ์๋ฃ๊ตฌ์กฐ์ธ๋ฐ, ๊ตณ์ด ์ค๋ณต์ด ๋ง์ ๊ฒฝ์ฐ์ ์ด ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํด ๊ฒ์ ์๋๋ฅผ ๋๋ฆฌ๊ฒ ํ ํ์๊ฐ ์๋ค. ํธ๋ฆฌ์ ์ฝ์ ํ๋ ๊ฒ๋ณด๋ค ๋ ธ๋์ count๋ฅผ ๊ฐ์ง๊ฒ ํ์ฌ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ํจ์ฌ ํจ์จ์ ์ด๋ค.
โจ BST ํต์ฌ ์ฐ์ฐ
๊ฒ์
์ฝ์
์ญ์
ํธ๋ฆฌ ์์ฑ
ํธ๋ฆฌ ์ญ์
โจ ์๊ฐ ๋ณต์ก๋
๊ท ๋ฑ ํธ๋ฆฌ : ๋ ธ๋ ๊ฐ์๊ฐ N๊ฐ์ผ ๋, O(logN)
ํธํฅ ํธ๋ฆฌ : ๋ ธ๋ ๊ฐ์๊ฐ N๊ฐ์ผ ๋, O(N)
์ฝ์ , ๊ฒ์, ์ญ์ ์๊ฐ ๋ณต์ก๋๋ ํธ๋ฆฌ์ Depth์ ๋น๋ก.
โจ ์ญ์ ์ 3๊ฐ์ง case
์์์ด ์๋ ๋จ๋ง ๋ ธ๋์ผ ๋ -> ๊ทธ๋ฅ ์ญ์
์์์ด 1๊ฐ์ธ ๋ ธ๋์ผ ๋ -> ์ง์์ง ๋ ธ๋์ ์์์ ์ฌ๋ฆฌ๊ธฐ
์์์ด 2๊ฐ์ธ ๋ ธ๋์ผ ๋ -> ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋์์ ๊ฐ์ฅ ์์ ๊ฐ or ์ผ์ชฝ ์์ ๋ ธ๋์์ ๊ฐ์ฅ ํฐ ๊ฐ ์ฌ๋ฆฌ๊ธฐ
ํธํฅ๋ ํธ๋ฆฌ(์ ๋ ฌ๋ ์ํ ๊ฐ์ ํธ๋ฆฌ๋ก ๋ง๋ค๋ฉด ํ์ชฝ์ผ๋ก ๋ป์)๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(N) ์ด๋ฏ๋ก ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ด์ ๊ฐ ์ฌ๋ผ์ง๋ค. ์ด๋ฅผ ๋ฐ๋ก ์ก๋๋ก ๋์์ฃผ๊ณ ๊ฐ์ ๋ ํธ๋ฆฌ๋ AVL Tree, RedBlack Tree๊ฐ ์๋ค.
โจ ์ด์ง ํธ๋ฆฌ์ ์ํ ๋ฐฉ๋ฒ
์ ์ ์ํ(Pre Order) : ๋ฃจํธ -> ์ผ์ชฝ -> ์ค๋ฅธ์ชฝ
์ค์ ์ํ(In Order) : ์ผ์ชฝ -> ๋ฃจํธ -> ์ค๋ฅธ์ชฝ
ํ์ ์ํ(Post Order) : ์ผ์ชฝ -> ์ค๋ฅธ์ชฝ -> ๋ฃจํธ
Trie (ํธ๋ผ์ด)
โจ Trie ์๋ฃ๊ตฌ์กฐ๋?
์ผ๋ฐ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก, Digital Tree, Radix Tree, Prefix Tree๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
ํ ์คํธ ์๋ ์์ฑ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ด ๋ฌธ์์ด์ ์ ์ฅํ๊ณ ํ์ํ๋๋ฐ ์ ์ฉํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
โจ Trie ์๋ฃ๊ตฌ์กฐ์ ํํ๋?
๊ฐ ๋ ธ๋๋ <Key, Value> ๋งต์ ๊ฐ์ง๊ณ ์๋ค. Key๋ ํ๋์ ์ํ๋ฒณ์ด ๋๊ณ , Value๋ ๊ทธ Key์ ํด๋นํ๋ ์์ ๋ ธ๋๊ฐ ๋๋ค.
๋ค์์ DEV, DEAR, PIE, POP, POW๋ผ๋ ๋จ์ด๊ฐ ๋ค์ด์๋ Trie ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋์ํํ ๊ฒ์ด๋ค. ํด๋ํฐ ์ ํ๋ฒํธ๋ถ์์ ๊ฒ์์ ํ๊ฑฐ๋ ์ฌ์ ์์ ๋จ์ด๋ฅผ ์ฐพ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
์๋ฅผ ๋ค์ด, ์๋ ๊ทธ๋ฆผ์์ 'DEV'๋ผ๋ ๋ฌธ์์ด์ ์ฐพ์ผ๋ ค๋ฉด ๋ฃจํธ ๋ ธ๋์์๋ถํฐ ์์ฐจ์ ์ผ๋ก [D] -> [E] -> [V] ๋ฅผ ํ์ํ๋ค.
๊ทธ๋ฆผ์์ ๋ณผ ์ ์๋ฏ์ด
๋ฃจํธ ๋ ธ๋๋ ํน์ ๋ฌธ์๋ฅผ ์๋ฏธํ์ง ์๊ณ , ์์ ๋ ธ๋๋ง ๊ฐ์ง๊ณ ์๋ค.์ ์ํ ์ ์ '๋ถ๋ชจ ๋ ธ๋'๋ '์์ ์ด ์ด๋ค ์ํ๋ฒณ(Key)์ ํด๋นํ๋ ๋ ธ๋(Value)'์ธ์ง๋ฅผ ๊ฐ์ง๊ณ ์๋๊ฒ ์๋๋ผ๋ ์ ์ ๋๋ค.
์ฆ, ๋ฃจํธ ๋ ธ๋๋ [D], [P]๋ผ๊ณ ํ๋ ์ํ๋ฒณ์ Key๋ก ํ๋ ์์ ๋ ธ๋๋ค์ ๊ฐ์ง๊ณ ์๊ณ , [D]๋ [E]๋ฅผ Key๋ก ํ๋ ์์ ๋ ธ๋, [P]๋ [I]์ [O]๋ฅผ Key๋ก ํ๋ ์์ ๋ ธ๋๋ค์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด๋ค.
๋ ๋ฃจํธ ๋ ธ๋๋ฅผ ์ ์ธํ
๋ ธ๋์ ์์๋ค์ ํด๋น ๋ ธ๋์ ๊ณตํต ์ ๋์ด๋ฅผ ๊ฐ์ง๋ค๋ ํน์ง์ด ์๋ค.์ฆ, 'DE' ๋ ธ๋์ ์์์ธ 'DEAR'์ 'DEV'๋ 'DE-'๋ฅผ ๊ณตํต ์ ๋์ด๋ก ๊ฐ์ง๋ฉฐ, 'P'์ ์์์ธ 'POW'์ 'PIE'๋ 'P-'๋ฅผ ๊ณตํต ์ ๋์ด๋ก ๊ฐ์ง๋ค.
โจ Trie ์๋ฃ๊ตฌ์กฐ์ ํน์ง
์ ๋ ฌ๋ ํธ๋ฆฌ ๊ตฌ์กฐ์ด๋ค.(๋ฐ์ดํฐ์ ๋ฐ๋ผ ์ด์งํธ๋ฆฌ์ผ ๋๋ ์๋ค.)
Trie๋ ์์ ๋ ธ๋๋ฅผ Map<Key, Value> ํํ๋ก ๊ฐ์ง๊ณ ์๋ค.
๋ฃจํธ ๋ ธ๋๋ฅผ ์ ์ธํ ๋ ธ๋์ ์์๋ค์ ํด๋น ๋ ธ๋์ ๊ณตํต ์ ๋์ด๋ฅผ ๊ฐ์ง๋ค.
๋ฃจํธ ๋ ธ๋๋ ๋น ๋ฌธ์์ ์ฐ๊ด์๋ค.(ํน์ ๋ฌธ์๊ฐ ํ ๋น๋์ด ์์ง ์๋ค.)
Red Black Tree
RBT(Red-Black Tree)๋ BST ๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ๋ ํธ๋ฆฌ ํ์์ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด Red-Black Tree ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฒ๋๋ฉด Search, Insert, Delete ์ O(log n)์ ์๊ฐ ๋ณต์ก๋๊ฐ ์์๋๋ค. ๋์ผํ ๋ ธ๋์ ๊ฐ์์ผ ๋, depth ๋ฅผ ์ต์ํํ์ฌ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ด๋ ๊ฒ์ด ํต์ฌ ์์ด๋์ด์ด๋ค. ๋์ผํ ๋ ธ๋์ ๊ฐ์์ผ ๋, depth ๊ฐ ์ต์๊ฐ ๋๋ ๊ฒฝ์ฐ๋ tree ๊ฐ complete binary tree ์ธ ๊ฒฝ์ฐ์ด๋ค.
โจ Red-Black Tree ์ ์ ์
Red-Black Tree ๋ ๋ค์์ ์ฑ์ง๋ค์ ๋ง์กฑํ๋ BST ์ด๋ค.
๊ฐ ๋ ธ๋๋
RedorBlack์ด๋ผ๋ ์๊น์ ๊ฐ๋๋ค.Root node ์ ์๊น์
Black์ด๋ค.๊ฐ leaf node ๋
black์ด๋ค.์ด๋ค ๋ ธ๋์ ์๊น์ด
red๋ผ๋ฉด ๋ ๊ฐ์ children ์ ์๊น์ ๋ชจ๋ black ์ด๋ค.๊ฐ ๋ ธ๋์ ๋ํด์ ๋ ธ๋๋ก๋ถํฐ descendant leaves ๊น์ง์ ๋จ์ ๊ฒฝ๋ก๋ ๋ชจ๋ ๊ฐ์ ์์ black nodes ๋ค์ ํฌํจํ๊ณ ์๋ค. ์ด๋ฅผ ํด๋น ๋ ธ๋์
Black-Height๋ผ๊ณ ํ๋ค. cf) Black-Height: ๋ ธ๋ x ๋ก๋ถํฐ ๋ ธ๋ x ๋ฅผ ํฌํจํ์ง ์์ leaf node ๊น์ง์ simple path ์์ ์๋ black nodes ๋ค์ ๊ฐ์
โจ Red-Black Tree ์ ํน์ง
Binary Search Tree ์ด๋ฏ๋ก BST ์ ํน์ง์ ๋ชจ๋ ๊ฐ๋๋ค.
Root node ๋ถํฐ leaf node ๊น์ง์ ๋ชจ๋ ๊ฒฝ๋ก ์ค ์ต์ ๊ฒฝ๋ก์ ์ต๋ ๊ฒฝ๋ก์ ํฌ๊ธฐ ๋น์จ์ 2 ๋ณด๋ค ํฌ์ง ์๋ค. ์ด๋ฌํ ์ํ๋ฅผ
balanced์ํ๋ผ๊ณ ํ๋ค.๋ ธ๋์ child ๊ฐ ์์ ๊ฒฝ์ฐ child ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ NIL ๊ฐ์ ์ ์ฅํ๋ค. ์ด๋ฌํ NIL ๋ค์ leaf node ๋ก ๊ฐ์ฃผํ๋ค.
RBT ๋ BST ์ ์ฝ์ , ์ญ์ ์ฐ์ฐ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ด๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ๊ฒ์ธ๊ฐ?
โจ ์ฝ์
์ฐ์ BST ์ ํน์ฑ์ ์ ์งํ๋ฉด์ ๋ ธ๋๋ฅผ ์ฝ์ ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ์ ๋ ๋ ธ๋์ ์๊น์ RED ๋ก ์ง์ ํ๋ค. Red ๋ก ์ง์ ํ๋ ์ด์ ๋ Black-Height ๋ณ๊ฒฝ์ ์ต์ํํ๊ธฐ ์ํจ์ด๋ค. ์ฝ์ ๊ฒฐ๊ณผ RBT ์ ํน์ฑ ์๋ฐฐ(violation)์ ๋ ธ๋์ ์๊น์ ์กฐ์ ํ๊ณ , Black-Height ๊ฐ ์๋ฐฐ๋์๋ค๋ฉด rotation ์ ํตํด height ๋ฅผ ์กฐ์ ํ๋ค. ์ด๋ฌํ ๊ณผ์ ์ ํตํด RBT ์ ๋์ผํ height ์ ์กด์ฌํ๋ internal node ๋ค์ Black-height ๊ฐ ๊ฐ์์ง๊ฒ ๋๊ณ ์ต์ ๊ฒฝ๋ก์ ์ต๋ ๊ฒฝ๋ก์ ํฌ๊ธฐ ๋น์จ์ด 2 ๋ฏธ๋ง์ผ๋ก ์ ์ง๋๋ค.
โจ ์ญ์
์ญ์ ๋ ์ฝ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก BST ์ ํน์ฑ์ ์ ์งํ๋ฉด์ ํด๋น ๋ ธ๋๋ฅผ ์ญ์ ํ๋ค. ์ญ์ ๋ ๋ ธ๋์ child ์ ๊ฐ์์ ๋ฐ๋ผ rotation ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ์ง๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ์ง์์ง ๋ ธ๋์ ์๊น์ด Black ์ด๋ผ๋ฉด Black-Height ๊ฐ 1 ๊ฐ์ํ ๊ฒฝ๋ก์ black node ๊ฐ 1 ๊ฐ ์ถ๊ฐ๋๋๋ก rotation ํ๊ณ ๋ ธ๋์ ์๊น์ ์กฐ์ ํ๋ค. ์ง์์ง ๋ ธ๋์ ์๊น์ด red ๋ผ๋ฉด Violation ์ด ๋ฐ์ํ์ง ์์ผ๋ฏ๋ก RBT ๊ฐ ๊ทธ๋๋ก ์ ์ง๋๋ค.
Java Collection ์์ TreeMap ๋ ๋ด๋ถ์ ์ผ๋ก RBT ๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , HashMap ์์์ Separate Chaining์์๋ ์ฌ์ฉ๋๋ค. ๊ทธ๋งํผ ํจ์จ์ด ์ข๊ณ ์ค์ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
Heap
ํ์ ์๋ฃ๊ตฌ์กฐ์ ์ผ์ข ์ผ๋ก ์ฐ์ ์์ ํ๋ฅผ ์ํด์ ๋ง๋ค์ด์ก๋ค.
์ฐ์ ์์ ํ : ์ฐ์ ์์์ ๊ฐ๋ ์ ํ์ ๋์ ํ ์๋ฃ๊ตฌ์กฐ.
๋ฐ์ดํฐ๋ค์ด ์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ๊ฐ ํ์์ ๋จผ์ ๋น ์ ธ ๋๊ฐ๋ค.
์ธ์ ์ฌ์ฉ?
์๋ฎฌ๋ ์ด์ ์์คํ , ์์ ์ค์ผ์ค๋ง, ์์นํด์ ๊ณ์ฐ.
์ฐ์ ์์ ํ๋ ๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ํ์ผ๋ก ๊ตฌํํ๋ค. (ํ์ผ๋ก ๊ตฌํํ๋ ๊ฒ ๊ฐ์ฅ ํจ์จ์ ์ด๋ค.)
์๊ฐ ๋ณต์ก๋
์ฝ์ : O(logN)
์ญ์ : O(logN)
์คํ : LIFO, ํ : FIFO
โจ ๊ฐ๋
Tree์ ํ์์ ์ทจํ๊ณ ์์ผ๋ฉฐ Tree ์ค์์๋ ๋ฐฐ์ด์ ๊ธฐ๋ฐ์ผ๋ก ํ (Complete Binary Tree)์์ ์ด์ง ํธ๋ฆฌ์ด๋ค.
์ต๋๊ฐ ๋ฐ ์ต์๊ฐ์ ์ฐพ์๋ด๋ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ๊ณ ์๋ ์์ ์ด์ง ํธ๋ฆฌ์ด๋ค.
๋ฐฐ์ด์ ํธ๋ฆฌ์ ๊ฐ์ ๋ฃ์ด์ค ๋๋ 0๋ฒ์งธ๋ ๊ฑด๋๋ฐ๊ณ 1๋ฒ์งธ๋ถํฐ ๋ฃจํธ ๋ ธ๋๊ฐ ์์๋๋ค. ์ด์ ๋ ๋ ธ๋์ ๊ณ ์ ๋ฒํธ์ index๋ฅผ ์ผ์น์์ผ ํผ๋์ ์ค์ด๊ธฐ ์ํจ์ด๋ค.
์ค๋ณต๋ ๊ฐ์ ํ์ฉ. (์ด์ง ํ์ ํธ๋ฆฌ๋ ์ค๋ณต ๊ฐ์ ํ์ฉํ์ง ์์.)
ํ์ ์ข ๋ฅ๋ก๋ ์ต๋ํ๊ณผ ์ต์ํ์ด ์กด์ฌํ๋ค.
์ต๋ํ : ๊ฐ ๋ ธ๋์ ๊ฐ์ด ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ Complete Binary Tree๋ฅผ ๋งํ๋ค.
์ต์ํ์ ์ต๋ํ์ ๋ฐ๋์ด๋ค.
์ต๋ํ์์๋ Root Node์ ์๋ ๊ฐ์ด ์ ์ผ ํฌ๋ฏ๋ก, ์ต๋๊ฐ์ ์ฐพ๋๋ฐ ์์๋๋ ์ฐ์ฐ์ ์๊ฐ ๋ณต์ก๋๋ O(1)์ด๋ค.
Complete Binary Tree์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ ์ด์ฉํด ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ธ๋ฑ์ค๋ฅผ ํตํ Random Access๊ฐ ๊ฐ๋ฅํ๋ค.
Index ๋ฒํธ๋ ๋ ธ๋ ๊ฐ์๊ฐ n๊ฐ์ผ ๋, i๋ฒ์งธ ๋ ธ๋์ ๋ํ์ฌ ์ผ์ชฝ ์์์ ix2, ์ค๋ฅธ์ชฝ ์์์ ix2+1๊ฐ ๋๋ค.

โจ ๊ตฌํ
ํ์ ์ ์ฅํ๋ ํ์ค์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ ๋ฐฐ์ด์ด๋ค.
๊ตฌํ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค์ธ 0์ ์ฌ์ฉ๋์ง ์๊ณ , 1๋ถํฐ ์์ํ๋ค.
ํน์ ์์น์ ๋ ธ๋ ๋ฒํธ๋ ์๋ก์ด ๋ ธ๋๊ฐ ์ถ๊ฐ๋์ด๋ ๋ณํ์ง ์๋๋ค.
<๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋์ ๊ด๊ณ>
์ผ์ชฝ ์์ index : (๋ถ๋ชจ index) * 2
์ค๋ฅธ์ชฝ ์์ index : (๋ถ๋ชจ index) * 2 + 1
๋ถ๋ชจ index : (์์ index) / 2
<ํ์ ์ฝ์ >
ํ์ ์๋ก์ด ์์๊ฐ ๋ค์ด์ค๋ฉด, ์ผ๋จ ์๋ก์ด ๋ ธ๋๋ฅผ ํ์ ๋ง์ง๋ง ๋ ธ๋์ ์ฝ์ .
์๋ก์ด ๋ ธ๋๋ฅผ ๊ฒ์ฌํด์ ๋ถ๋ชจ ๋ ธ๋์ ๊ตํํ๋ค.
[์ต๋ ํ ์ฝ์ ๊ตฌํ]
๋ถ๋ชจ ๋ ธ๋ : ์์ ์ ์ธ๋ฑ์ค / 2 ์ด๋ฏ๋ก ๋ง์ง๋ง ๋ ธ๋์ ๋น๊ตํ์ฌ ๋ง์ง๋ง ๋ ธ๋๊ฐ ๋ ํฌ๋ฉด ์์น๋ฅผ ๋ฐ๊ฟ์ค๋ค.
<ํ์ ์ญ์ >
์ต๋ ํ์์ ์ต๋๊ฐ์ ๋ฃจํธ ๋ ธ๋์ด๋ฏ๋ก ๋ฃจํธ ๋ ธ๋๊ฐ ์ญ์ ๋๋ค. (์ต๋ ํ์์ ์ญ์ ์ฐ์ฐ์ ์ต๋๊ฐ ์์๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด๋ค.)
์ญ์ ๋ ๋ฃจํธ ๋ ธ๋์์๋ ํ์ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
ํ์ ์ฌ๊ตฌ์ฑ ํ๋ค.
[์ต๋ ํ ์ญ์ ๊ตฌํ]
โจ Binary Heap : Heapify
๋ ๊ฐ์ ์๋ธ ํธ๋ฆฌ๊ฐ ์ต๋ํ(์ต์ํ)์ผ ๋, root๋ฅผ ํฌํจํ๋ ์ ์ฒด๊ฐ heap์ด ๋๋๋ก ์์น๋ฅผ ์กฐ์ ํ๋ ๊ณผ์ ์ ๋งํ๋ค.
๋ฃจํธ์์ ์์ ๊ฐ์ด ํ๋ฌ ๋ด๋ ค๊ฐ๋ฉด์ ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ผ๋ก ์งํ๋๋ค. ์ต๋ํ์ ๊ฒฝ์ฐ root๊ฐ child๋ณด๋ค ์์ผ๋ฉด ๋ ๊ฐ์ child node ์ค ๊ฐ์ด ํฐ ๋ ธ๋๋ฅผ root์ ๊ต์ฒดํ๊ณ ๊ต์ฒดํ ๋ ธ๋๊ฐ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
Tree Map
ํธ๋ฆฌ๋ ๊ฐ์ ๊ฐ์ง ๋
ธ๋(Node)์ ์ด ๋
ธ๋๋ค์ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฐ์ (Edge)์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋ค.
๊ทธ๋ฆผ ์ ๋ฐ์ดํฐ 1์ ๊ฐ์ง ๋
ธ๋๊ฐ ๋ฃจํธ(Root) ๋
ธ๋๋ค.
๋ชจ๋ ๋ ธ๋๋ค์ 0๊ฐ ์ด์์ ์์(Child) ๋ ธ๋๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ ๋ณดํต ๋ถ๋ชจ-์์ ๊ด๊ณ๋ก ๋ถ๋ฅธ๋ค.
์๋์ฒ๋ผ ๊ฐ์กฑ ๊ด๊ณ๋๋ฅผ ๊ทธ๋ฆด ๋ ํธ๋ฆฌ ํ์์ผ๋ก ๋ํ๋ด๋ ๊ฒฝ์ฐ๋ ๋ง์ด ๋ดค์ ๊ฒ์ด๋ค. ์๋ฃ๊ตฌ์กฐ์ ํธ๋ฆฌ๋ ์ด ๋ฐฉ์์ ๊ทธ๋๋ก ๊ตฌํํ ๊ฒ์ด๋ค.
ํธ๋ฆฌ๋ ๋ช ๊ฐ์ง ํน์ง์ด ์๋ค.
ํธ๋ฆฌ์๋ ์ฌ์ดํด์ด ์กด์ฌํ ์ ์๋ค. (๋ง์ฝ ์ฌ์ดํด์ด ๋ง๋ค์ด์ง๋ค๋ฉด, ๊ทธ๊ฒ์ ํธ๋ฆฌ๊ฐ ์๋๊ณ ๊ทธ๋ํ๋ค)
๋ชจ๋ ๋ ธ๋๋ ์๋ฃํ์ผ๋ก ํํ์ด ๊ฐ๋ฅํ๋ค.
๋ฃจํธ์์ ํ ๋ ธ๋๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ ์ ์ผํ ๊ฒฝ๋ก ๋ฟ์ด๋ค.
๋ ธ๋์ ๊ฐ์๊ฐ N๊ฐ๋ฉด, ๊ฐ์ ์ N-1๊ฐ๋ฅผ ๊ฐ์ง๋ค.
๊ฐ์ฅ ์ค์ํ ๊ฒ์, ๊ทธ๋ํ์ ํธ๋ฆฌ์ ์ฐจ์ด๊ฐ ๋ฌด์์ธ๊ฐ์ธ๋ฐ, ์ด๋ ์ฌ์ดํด์ ์ ๋ฌด๋ก ์ค๋ช
ํ ์ ์๋ค.
ํธ๋ฆฌ ์ํ ๋ฐฉ์
ํธ๋ฆฌ๋ฅผ ์ํํ๋ ๋ฐฉ์์ ์ด 4๊ฐ์ง๊ฐ ์๋ค. ์์ ๊ทธ๋ฆผ์ ์์๋ก ์งํํด๋ณด์
์ ์ ์ํ(pre-order)
๊ฐ ๋ฃจํธ(Root)๋ฅผ ์์ฐจ์ ์ผ๋ก ๋จผ์ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์์ด๋ค.
(Root โ ์ผ์ชฝ ์์ โ ์ค๋ฅธ์ชฝ ์์)
1 โ 2 โ 4 โ 8 โ 9 โ 5 โ 10 โ 11 โ 3 โ 6 โ 13 โ 7 โ 14
์ค์ ์ํ(in-order)
์ผ์ชฝ ํ์ ํธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธ ํ ๋ฃจํธ(Root)๋ฅผ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์์ด๋ค.
(์ผ์ชฝ ์์ โ Root โ ์ค๋ฅธ์ชฝ ์์)
8 โ 4 โ 9 โ 2 โ 10 โ 5 โ 11 โ 1 โ 6 โ 13 โ 3 โ14 โ 7
ํ์ ์ํ(post-order)
์ผ์ชฝ ํ์ ํธ๋ฆฌ๋ถํฐ ํ์๋ฅผ ๋ชจ๋ ๋ฐฉ๋ฌธ ํ ๋ฃจํธ(Root)๋ฅผ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์์ด๋ค.
(์ผ์ชฝ ์์ โ ์ค๋ฅธ์ชฝ ์์ โ Root)
8 โ 9 โ 4 โ 10 โ 11 โ 5 โ 2 โ 13 โ 6 โ 14 โ 7 โ 3 โ 1
๋ ๋ฒจ ์ํ(level-order)
๋ฃจํธ(Root)๋ถํฐ ๊ณ์ธต ๋ณ๋ก ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์์ด๋ค.
1 โ 2 โ 3 โ 4 โ 5 โ 6 โ 7 โ 8 โ 9 โ 10 โ 11 โ 13 โ 14
Code
Graph (๊ทธ๋ํ)
โจ ์ ์ ๊ณผ ๊ฐ์ ์ ์งํฉ, Graph
cf) ํธ๋ฆฌ ๋ํ ๊ทธ๋ํ์ด๋ฉฐ, ๊ทธ ์ค ์ฌ์ดํด์ด ํ์ฉ๋์ง ์๋ ๊ทธ๋ํ๋ฅผ ๋งํ๋ค.
โจ๊ทธ๋ํ ๊ด๋ จ ์ฉ์ด ์ ๋ฆฌ
โจUndirected Graph ์ Directed Graph (Digraph)
๋ง ๊ทธ๋๋ก ์ ์ ๊ณผ ๊ฐ์ ์ ์ฐ๊ฒฐ๊ด๊ณ์ ์์ด์ ๋ฐฉํฅ์ฑ์ด ์๋ ๊ทธ๋ํ๋ฅผ Undirected Graph ๋ผ ํ๊ณ , ๊ฐ์ ์ ๋ฐฉํฅ์ฑ์ด ํฌํจ๋์ด ์๋ ๊ทธ๋ํ๋ฅผ Directed Graph ๋ผ๊ณ ํ๋ค.
Directed Graph (Digraph)
V = {1, 2, 3, 4, 5, 6} E = {(1, 4), (2,1), (3, 4), (3, 4), (5, 6)} (u, v) = vertex u์์ vertex v๋ก ๊ฐ๋ edge
Undirected Graph
V = {1, 2, 3, 4, 5, 6} E = {(1, 4), (2,1), (3, 4), (3, 4), (5, 6)} (u, v) = vertex u์ vertex v๋ฅผ ์ฐ๊ฒฐํ๋ edge
โจDegree
Undirected Graph ์์ ๊ฐ ์ ์ (Vertex)์ ์ฐ๊ฒฐ๋ Edge ์ ๊ฐ์๋ฅผ Degree ๋ผ ํ๋ค. Directed Graph ์์๋ ๊ฐ์ ์ ๋ฐฉํฅ์ฑ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ Degree ๊ฐ ๋ ๊ฐ๋ก ๋๋๊ฒ ๋๋ค. ๊ฐ ์ ์ ์ผ๋ก๋ถํฐ ๋๊ฐ๋ ๊ฐ์ ์ ๊ฐ์๋ฅผ Outdegree ๋ผ ํ๊ณ , ๋ค์ด์ค๋ ๊ฐ์ ์ ๊ฐ์๋ฅผ Indegree ๋ผ ํ๋ค.
โจ๊ฐ์ค์น ๊ทธ๋ํ(Weight Graph)์ ๋ถ๋ถ ๊ทธ๋ํ(Sub Graph)
๊ฐ์ค์น ๊ทธ๋ํ๋ ๊ฐ์ ์ ๊ฐ์ค์น ์ ๋ณด๋ฅผ ๋์ด์ ๊ตฌ์ฑํ ๊ทธ๋ํ๋ฅผ ๋งํ๋ค. ๋ฐ๋์ ๊ฐ๋ ์ธ ๋น๊ฐ์ค์น ๊ทธ๋ํ ์ฆ, ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ๋์ผํ ๊ทธ๋ํ๋ ๋ฌผ๋ก ์กด์ฌํ๋ค. ๋ถ๋ถ ์งํฉ๊ณผ ์ ์ฌํ ๊ฐ๋ ์ผ๋ก ๋ถ๋ถ ๊ทธ๋ํ๋ผ๋ ๊ฒ์ด ์๋ค. ๋ถ๋ถ ๊ทธ๋ํ๋ ๋ณธ๋์ ๊ทธ๋ํ์ ์ผ๋ถ ์ ์ ๋ฐ ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ทธ๋ํ๋ฅผ ๋งํ๋ค.
โจ๊ทธ๋ํ๋ฅผ ๊ตฌํํ๋ ๋ ๋ฐฉ๋ฒ
์ธ์ ํ๋ ฌ (adjacent matrix) : ์ ๋ฐฉ ํ๋ ฌ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
ํด๋นํ๋ ์์น์ value ๊ฐ์ ํตํด์ vertex ๊ฐ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ O(1) ์ผ๋ก ํ์ ํ ์ ์๋ค. Edge ๊ฐ์์๋ ๋ฌด๊ดํ๊ฒ V^2 ์ Space Complexity ๋ฅผ ๊ฐ๋๋ค. Dense graph ๋ฅผ ํํํ ๋ ์ ์ ํ ๋ฐฉ๋ฒ์ด๋ค.
์ธ์ ๋ฆฌ์คํธ (adjacent list) : ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
vertex ์ adjacent list ๋ฅผ ํ์ธํด๋ด์ผ ํ๋ฏ๋ก vertex ๊ฐ ์ฐ๊ฒฐ๋์ด์๋์ง ํ์ธํ๋๋ฐ ์ค๋ ๊ฑธ๋ฆฐ๋ค. Space Complexity ๋ O(E + V)์ด๋ค. Sparse graph ๋ฅผ ํํํ๋๋ฐ ์ ๋นํ ๋ฐฉ๋ฒ์ด๋ค.
โจ ๊ทธ๋ํ ํ์
๊ทธ๋ํ๋ ์ ์ ์ ๊ตฌ์ฑ ๋ฟ๋ง ์๋๋ผ ๊ฐ์ ์ ์ฐ๊ฒฐ์๋ ๊ท์น์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ํ์์ด ๋ณต์กํ๋ค. ๋ฐ๋ผ์ ๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ์ ํ์ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๋ค์์ ๋ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
โจ ๊น์ด ์ฐ์ ํ์ (Depth First Search: DFS)
๊ทธ๋ํ ์์ ์กด์ฌํ๋ ์์์ ํ ์ ์ ์ผ๋ก๋ถํฐ ์ฐ๊ฒฐ๋์ด ์๋ ํ ์ ์ ์ผ๋ก๋ง ๋์๊ฐ๋ค๋ผ๋ ๋ฐฉ๋ฒ์ ์ฐ์ ์ผ๋ก ํ์ํ๋ค. ์ผ๋จ ์ฐ๊ฒฐ๋ ์ ์ ์ผ๋ก ํ์ํ๋ ๊ฒ์ด๋ค. ์ฐ๊ฒฐํ ์ ์๋ ์ ์ ์ด ์์ ๋๊น์ง ๊ณ์ ์ฐ๊ฒฐํ๋ค๊ฐ ๋์ด์ ์ฐ๊ฒฐ๋์ง ์์ ์ ์ ์ด ์์ผ๋ฉด ๋ฐ๋ก ๊ทธ ์ ๋จ๊ณ์ ์ ์ ์ผ๋ก ๋์๊ฐ์ ์ฐ๊ฒฐํ ์ ์๋ ์ ์ ์ด ์๋์ง ์ดํด๋ด์ผ ํ ๊ฒ์ด๋ค. ๊ฐ๋ ๊ธธ์ ๋๋์ ์ค๋ ์ํฉ์ด ์กด์ฌํ๋ ๋ฏธ๋ก์ฐพ๊ธฐ์ฒ๋ผ ๊ตฌ์ฑํ๋ฉด ๋๋ ๊ฒ์ด๋ค. ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ผํ ๊น? ๋ฐ๋ก Stack ์ด๋ค. Time Complexity : O(V+E) โฆ vertex ๊ฐ์ + edge ๊ฐ์
โจ๋๋น ์ฐ์ ํ์ (Breadth First Search: BFS)
๊ทธ๋ํ ์์ ์กด์ฌํ๋ ์์์ ํ ์ ์ ์ผ๋ก๋ถํฐ ์ฐ๊ฒฐ๋์ด ์๋ ๋ชจ๋ ์ ์ ์ผ๋ก ๋์๊ฐ๋ค. Tree ์์์ Level Order Traversal ํ์์ผ๋ก ์งํ๋๋ ๊ฒ์ด๋ค. BFS ์์๋ ์๋ฃ๊ตฌ์กฐ๋ก Queue ๋ฅผ ์ฌ์ฉํ๋ค. ์ฐ๋ฝ์ ์ทจํ ์ ์ ์ ์์๋ฅผ ๊ธฐ๋กํ๊ธฐ ์ํ ๊ฒ์ด๋ค. ์ฐ์ , ํ์์ ์์ํ๋ ์ ์ ์ Queue ์ ๋ฃ๋๋ค.(enqueue) ๊ทธ๋ฆฌ๊ณ dequeue ๋ฅผ ํ๋ฉด์ dequeue ํ๋ ์ ์ ๊ณผ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์ ์ ๋ค์ enqueue ํ๋ค. ์ฆ vertex ๋ค์ ๋ฐฉ๋ฌธํ ์์๋๋ก queue ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. Time Complexity : O(V+E) โฆ vertex ๊ฐ์ + edge ๊ฐ์ ! BFS ๋ก ๊ตฌํ ๊ฒฝ๋ก๋ ์ต๋จ ๊ฒฝ๋ก์ด๋ค.
โจ Minimum Spanning Tree
๊ทธ๋ํ G ์ spanning tree ์ค edge weight ์ ํฉ์ด ์ต์์ธ spanning tree๋ฅผ ๋งํ๋ค. ์ฌ๊ธฐ์ ๋งํ๋ spanning tree๋ ๊ทธ๋ํ G ์ ๋ชจ๋ vertex ๊ฐ cycle ์ด ์์ด ์ฐ๊ฒฐ๋ ํํ๋ฅผ ๋งํ๋ค.
โจ Kruskal Algorithm
์ด๊ธฐํ ์์ ์ผ๋ก edge ์์ด vertex ๋ค๋ง์ผ๋ก ๊ทธ๋ํ๋ฅผ ๊ตฌ์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ weight ๊ฐ ์ ์ผ ์์ edge ๋ถํฐ ๊ฒํ ํ๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์ Edge Set ์ non-decreasing ์ผ๋ก sorting ํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์์ weight ์ ํด๋นํ๋ edge ๋ฅผ ์ถ๊ฐํ๋๋ฐ ์ถ๊ฐํ ๋ ๊ทธ๋ํ์ cycle ์ด ์๊ธฐ์ง ์๋ ๊ฒฝ์ฐ์๋ง ์ถ๊ฐํ๋ค. spanning tree ๊ฐ ์์ฑ๋๋ฉด ๋ชจ๋ vertex ๋ค์ด ์ฐ๊ฒฐ๋ ์ํ๋ก ์ข ๋ฃ๊ฐ ๋๊ณ ์์ฑ๋ ์ ์๋ ๊ทธ๋ํ์ ๋ํด์๋ ๋ชจ๋ edge ์ ๋ํด ํ๋จ์ด ์ด๋ฃจ์ด์ง๋ฉด ์ข ๋ฃ๋๋ค. Kruskal Algorithm์ ์ธ๋ถ ๋์๊ณผ์ Kruskal Algorithm ๊ด๋ จ Code
์ด๋ป๊ฒ cycle ์์ฑ ์ฌ๋ถ๋ฅผ ํ๋จํ๋๊ฐ?
Graph ์ ๊ฐ vertex ์ set-id๋ผ๋ ๊ฒ์ ์ถ๊ฐ์ ์ผ๋ก ๋ถ์ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ธฐํ ๊ณผ์ ์์ ๋ชจ๋ 1~n ๊น์ง์ ๊ฐ์ผ๋ก ๊ฐ๊ฐ์ vertex ๋ค์ ์ด๊ธฐํ ํ๋ค. ์ฌ๊ธฐ์ 0 ์ ์ด๋ ํ edge ์๋ ์ฐ๊ฒฐ๋์ง ์์์์ ์๋ฏธํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๊ฒฐํ ๋๋ง๋ค set-id๋ฅผ ํ๋๋ก ํต์ผ์ํค๋๋ฐ, ๊ฐ์ด ๋์ผํ set-id ๊ฐ์๊ฐ ๋ง์ set-id ๊ฐ์ผ๋ก ํต์ผ์ํจ๋ค.
Time Complexity
Edge ์ weight ๋ฅผ ๊ธฐ์ค์ผ๋ก sorting - O(E log E)
cycle ์์ฑ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ๊ณ set-id ๋ฅผ ํต์ผ - O(E + V log V) => ์ ์ฒด ์๊ฐ ๋ณต์ก๋ : O(E log E)
โจ Prim Algorithm
์ด๊ธฐํ ๊ณผ์ ์์ ํ ๊ฐ์ vertex ๋ก ์ด๋ฃจ์ด์ง ์ด๊ธฐ ๊ทธ๋ํ A ๋ฅผ ๊ตฌ์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ๊ทธ๋ํ A ๋ด๋ถ์ ์๋ vertex ๋ก๋ถํฐ ์ธ๋ถ์ ์๋ vertex ์ฌ์ด์ edge ๋ฅผ ์ฐ๊ฒฐํ๋๋ฐ ๊ทธ ์ค ๊ฐ์ฅ ์์ weight ์ edge ๋ฅผ ํตํด ์ฐ๊ฒฐ๋๋ vertex ๋ฅผ ์ถ๊ฐํ๋ค. ์ด๋ค vertex ๊ฑด ๊ฐ์ ์๊ด์์ด edge ์ weight ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ์ฐ๊ฒฐ๋ vertex ๋ ๊ทธ๋ํ A ์ ํฌํจ๋๋ค. ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๊ณ ๋ชจ๋ vertex ๋ค์ด ์ฐ๊ฒฐ๋๋ฉด ์ข ๋ฃํ๋ค.
Time Complexity
=> ์ ์ฒด ์๊ฐ ๋ณต์ก๋ : O(E log V)
Hash (ํด์)
Hash Or HashTable์ ๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์ด์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด ๊ณ ์ ํ ์ธ๋ฑ์ค๋ฅผ ์ป๋๋ค.
์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ๋น ๋ฅธ ๊ฒ์ ์๋๋ฅผ ๊ฐ๋๋ค.
ํด์๋ ๋ค์ํ ๊ธธ์ด๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๋ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ก ๋งคํํ ๊ฐ์ ๋งํ๋ค.
โจ ํด์ ํจ์
๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด, ์์์ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ํ์ ์ฐ์ฐ์ ํตํด ๊ณ ์ ๋ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ก ๋งคํํ๋ ํจ์์ด๋ค. ํด์ ํจ์์ ์ํด ์ป์ด์ง๋ ๊ฐ์ ํด์ ์ฝ๋, ํด์๋ผ๊ณ ํ๋ค.
โจ ํด์ ํ
์ด๋ธ
ํค์ ๊ฐ์ ๋งคํํด๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค. ํด์ ํจ์๋ก ์ป์ ํด์๋ฅผ ํค๋ก ํ์ฉํ์ฌ index๋ก ์ฌ์ฉํ๊ณ ํด๋น index์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ํจ์จ์ ์ธ ๊ฒ์์ ์ํด ์ฌ์ฉ๋๋ค.
๋๊ธฐํ๋ฅผ ์ง์ํ๋ค.
key, value์ ๋ ๊ฐ์ ํ์ฉํ์ง ์๋๋ค.
Lee -> ํด์ ํจ์ -> 5 Koo -> ํด์ ํจ์ -> 2 Kim -> ํด์ ํจ์ -> 1 ... ... Choi -> ํด์ ํจ์ -> 5 // Lee์ ํด์ฑ๊ฐ ์ถฉ๋.
๊ฒฐ๊ตญ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด, ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ ํด์ ๊ฐ์ ๊ฐ์ง๊ฒ ๋์ด ์ถฉ๋์ด ๋ฐ์ํ๊ฒ ๋๋ค.
ํด์ ํ ์ด๋ธ์ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ ๊ฒฐ๊ตญ index์ ์ถฉ๋์ด๋ค. ํด์๋ ์๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ผ๋ฉด ํด์๊ฐ๋ ํญ์ ๊ฐ๋ค. ๊ทธ๋ฌ๋ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ๋ํ ๋์ผํ ํด์๊ฐ์ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ ํด์ ์ถฉ๋์ด ๋ฐ์ํ๋ค.
Collision ํ์.
๊ทธ๋ผ์๋ ํด์ ํ ์ด๋ธ์ ์ฐ๋ ์ด์ ?
์ ์ ์์์ผ๋ก ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํจ์ด๋ค.
ํ๋ ๋์คํฌ๋ ํด๋ผ์ฐ๋์ ์กด์ฌํ๋ ๋ฌดํํ ๋ฐ์ดํฐ๋ค์ ์ ํํ ๊ฐ์์ ํด์๊ฐ์ผ๋ก ๋งคํํ๋ฉด ์์ ๋ฉ๋ชจ๋ฆฌ๋ก๋ ํ๋ก์ธ์ค ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ค.
์ธ์ ๋ ๋์ผํ ํด์ ๊ฐ์ ๋ฆฌํด, index๋ฅผ ์๋ฉด ๋น ๋ฅธ ๊ฒ์์ด ๊ฐ๋ฅํด์ง๋ค.
ํด์ ํ ์ด๋ธ์ ์๊ฐ ๋ณต์ก๋ : O(1) [์ด์ง ํ์ ํธ๋ฆฌ๋ O(logN)]
โจ ์ถฉ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ
Separate Chaining

Key์ ๋ํ index๊ฐ ๊ฐ๋ฆฌํค๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ LinkedList๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์ด๋ค.
index๋ก ์ธํด์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๊ทธ index๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ LinkedList์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ค.
๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๋, ์ ํ ํ์์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๋ค.
์๊ฐ ๋ณต์ก๋ : O(N)
LinkedList ๋์ ํธ๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉด ์ฑ๋ฅ์ ๊ฐ์ ์ํฌ ์ ์๋ค.
JDK 1.8์ ๊ฒฝ์ฐ index์ ๋ ธ๋๊ฐ 8๊ฐ ์ดํ์ธ ๊ฒฝ์ฐ์๋ LinkedList๋ฅผ ์ฌ์ฉํ๊ณ 8๊ฐ๋ฅผ ๋์ด๊ฐ ๊ฒฝ์ฐ์๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ ์ ์ฅ ๊ตฌ์กฐ๋ฅผ ๋ฐ๊พธ๋๋ก ์ค๊ณ๋์ด ์๋ค.
Open Addressing
ํด์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ํด์ ํจ์๋ก ์ป์ ์ฃผ์๊ฐ ์๋ ๋ค๋ฅธ ์ฃผ์ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. (ํด๋น ํค ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๋ค๋ฉด ๋ค์ ์ฃผ์์ ์ ์ฅ.)
์ ํ ํ์ฌ(Linear Probing)
ํ์ฌ ์ฃผ์์์ ๊ณ ์ ํฌ๊ธฐ(ex.1)๋งํผ ๋ค์ ์ฃผ์๋ก ์ด๋ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
์ ๊ณฑ ํ์ฌ(Quadratic Probing)
๊ณ ์ ํฌ๊ธฐ๋งํผ ์ด๋ํ๋ ๊ฒ์ด ์๋ ์ด๋ ํฌ๊ธฐ๊ฐ ์ ๊ณฑ์๋ก ๋์ด๋๋ ๋ฐฉ์์ด๋ค. (1,4,9,16...)
์ด์ค ํด์ฑ(Double Hashing)
ํด์ ์ถฉ๋ ์ ๋ค๋ฅธ ํด์ ํจ์๋ฅผ ํ๋ฒ ๋ ์ ์ฉํ๋ ๋ฐฉ์์ด๋ค.
์ฌํด์ฑ(Rehashing)
ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ณ , ๋์ด๋ ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ์ ๋ง์ถ์ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ํด์ฑํ๋ ๋ฐฉ์์ด๋ค.
Open Addressing ๋ฐฉ์์ ์ญ์ ์ฒ๋ฆฌ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ฐ์ดํฐ A๋ฅผ ์ ์ฅํ๊ณ ๋ฐ์ดํฐ B๋ฅผ ์ ์ฅํ ๋ ์ถฉ๋(A์ ๊ฐ์ ๊ฐ)์ด ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํ์.
์ด๋, ๋ฐ์ดํฐ A๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ ์ฐพ์ผ๋ ค๊ณ ํ๋ index๋ฅผ ์ฐพ๊ธฐ ์ ์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋์ด์ ๊ฒ์์ ๋ฉ์ถ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ B๋ฅผ ์กฐํํ ์ ์๊ฒ ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ํ์ ๋๋ฏธ ๋ ธ๋๋ฅผ ์ฝ์ ํ๋ค. ์ค์ ๋ก ๊ฐ์ ๊ฐ์ง์ง ์์ง๋ง ๊ฒ์ ์ ๋ค์ index๊น์ง ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๋ค. ๋ฐ์ดํฐ ์ญ์ ๊ฐ ๋น๋ฒํ์ฌ ๋๋ฏธ ๋ ธ๋๊ฐ ์ฆ๊ฐํ ๊ฒฝ์ฐ, ์กฐํํ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์์์๋ ๋ถ๊ตฌํ๊ณ ๋๋ฏธ ๋ ธ๋ ๋๋ฌธ์ ๊ฒ์์ ์ํํ๋ฏ๋ก ๋๋ฏธ ๋ ธ๋๊ฐ ์ผ์ ๊ฐฏ์๊ฐ ๋์ด๊ฐ๋ฉด ํด์ ํ ์ด๋ธ์ ๋ฆฌ๋น๋ฉํด์ผ ํ๋ค.
โจ HashTable ve HashMap
HashMap : Map ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ ์ํด HashTable์ ์ฌ์ฉํ ํด๋์ค๋ก key์ value์ Null์ด ํ์ฉ๋๋ค. ๋๊ธฐํ๋ฅผ ์ง์ํ์ง ์๋๋ค.
HashTable : HashMap๋ณด๋ค ์๋๋ ๋๋ฆฌ์ง๋ง, ๋๊ธฐํ๋ฅผ ์ง์ํ๋ฉฐ key์ value์ null์ด ํ์ฉ๋์ง ์๋๋ค.
์ฝ์ด๋ณด๋ฉด ์ข์ ๊ธ
Last updated