2-3 Tree
2-3ํธ๋ฆฌ๋ ๊ฒ์ ํธ๋ฆฌ์ด์ง๋ง BST๋ ์๋๋๋ค.
์ฐจ์๊ฐ 3์ธ ๋ ธ๋๊ฐ ์กด์ฌํ ์ ์์ผ๋ฏ๋ก, Binary๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
2-3 Tree๋ ํธ๋ฆฌ์ ๋์ด๊ฐ ๊ท ํ์ ์ด๋ฃจ๋ฉฐ ๋ด๋ถ๋ ธ๋์ ์ฐจ์๊ฐ 2 ๋๋ 3์ธ ๊ท ํ ํ์ํธ๋ฆฌ์ ๋๋ค.
2-3 Tree ์กฐ๊ฑด
2-3 Tree์๋ Internal Node์ External Node์ ๊ฐ๋ ์ด ์กด์ฌํฉ๋๋ค.
Internal Node(๋ด๋ถ๋ ธ๋)๋ Key๊ฐ ๋ค์ด์๋ ๋ด๋ถ ๋ ธ๋์ด๋ฉฐ,
External Node(์ธ๋ถ๋ ธ๋)๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์์ง ์์ ๋ ธ๋๋ก์จ Internal Node์ Leaf Node์ ์์์ผ๋ก ์กด์ฌํ๋ ๊ฐ์์ ๋ ธ๋์ ๋๋ค.
2-3 Tree์์ ๊ฐ๊ฐ์ ๋ด๋ถ ๋ ธ๋๋ 2-Node ์ด๊ฑฐ๋ 3-Node ์ ๋๋ค.
์ค๋ณต๋ Key๋ ํ์ฉํ์ง ์์ต๋๋ค.
2-Node๋ 1๊ฐ์ Key๋ฅผ ๊ฐ์ง๋ฉฐ, 2๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋๋ค.
3-Node๋ 2๊ฐ์ Key๋ฅผ ๊ฐ์ง๋ฉฐ, 3๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋๋ค.
leftChild์ middleChild๋ฅผ ๊ฐ๊ฐ 2-node์ ์ผ์ชฝ ์์ ๋ฐ ์ค๊ฐ ์์์ด๋ผ ํ๊ฒ ์ต๋๋ค.
leftKey๋ฅผ ํด๋น ๋ ธ๋์ key๋ผ ํ๊ฒ ์ต๋๋ค.
๋ฃจํธ๊ฐ leftChild์ธ ๋ชจ๋ ์๋ธํธ๋ฆฌ์ ํค ๊ฐ์ leftKey๋ณด๋ค ์๊ณ ,
๋ฃจํธ๊ฐ middleChild์ธ ๋ชจ๋ ์๋ธํธ๋ฆฌ์ key ๊ฐ์ leftKey๋ณด๋ค ํฝ๋๋ค.
leftChild์ middleChild, rightChild๋ฅผ ๊ฐ๊ฐ 3-node์ ์ผ์ชฝ, ์ค๊ฐ ๋ฐ ์ค๋ฅธ์ชฝ ์์์ด๋ผ ํ๊ฒ ์ต๋๋ค.
leftKey, rightKey๋ฅผ ํด๋น ๋ ธ๋์ key๋ผ ํ๊ฒ ์ต๋๋ค.
rightKey๋ leftKey๋ณด๋ค ํฝ๋๋ค.
๋ฃจํธ๊ฐ leftChild์ธ ๋ชจ๋ ์๋ธํธ๋ฆฌ์ ํค ๊ฐ์ leftKey๋ณด๋ค ์๊ณ ,
๋ฃจํธ๊ฐ middleChild์ธ ๋ชจ๋ ์๋ธํธ๋ฆฌ์ key ๊ฐ์ leftKey๋ณด๋ค ํฌ๋ฉฐ rightKey๋ณด๋ค ์์ต๋๋ค.
๋ฃจํธ๊ฐ rightChild์ธ ๋ชจ๋ ์๋ธํธ๋ฆฌ์ key ๊ฐ์ rightKey๋ณด๋ค ํฝ๋๋ค.
๋ชจ๋ ์ธ๋ถ ๋ ธ๋๋ ๊ฐ์ ๋ ๋ฒจ์ ์์ผ๋ฉฐ,
ํธ๋ฆฌ์ ๋์ด๊ฐ h์ผ ๋ ์ธ๋ถ ๋ ธ๋๋ h+1์ ์กด์ฌํฉ๋๋ค.
์์
Leaf Node์ธ External Node์๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์์ง ์์ต๋๋ค.
์์ผ๋ก์ ์ค๋ช ์ ๋ฑ์ฅํ๋ Leaf Node๋ External Node๊ฐ ์๋ Internal Node์ Leaf Node๋ฅผ ์๋ฏธํฉ๋๋ค.
๊ฒ์
๊ฒ์์ ๋๋ฌด๋ ์ฝ์ต๋๋ค.
์ฐพ์ผ๋ ค๋ ๊ฐ์ Root ๋ ธ๋์ leftKey, rightKey์ ๋น๊ตํฉ๋๋ค.
leftKey๋ณด๋ค ์์ ๊ฒฝ์ฐ - leftSubtree๋ฅผ ํ์ํฉ๋๋ค.
leftKey๋ณด๋ค ํฌ๊ณ , rightKey๋ณด๋ค ์์ ๊ฒฝ์ฐ - middleSubtree๋ฅผ ํ์ํฉ๋๋ค.
rightKey๋ณด๋ค ํฐ ๊ฒฝ์ฐ - rightSubtree๋ฅผ ํ์ํฉ๋๋ค.
์ถ๊ฐ
์ฐ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ ๋, ๊ธฐ๋ณธ์ ์ธ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐ๋์ Leaf Node์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํฉ๋๋ค.
๋ถ๋ชจ๋ ธ๋์ ๋น ๊ณต๊ฐ์ด ์๋ค๊ณ ํด์ ๋ถ๋ชจ ๋ ธ๋์ ์ฝ์ ํ์ง ์์ต๋๋ค. ๋ฐ๋์ ๋ฐ์ดํฐ๋ Leaf Node์ ์ฝ์ ํฉ๋๋ค.
1. ๊ฐ์ด ์ถ๊ฐ๋ ์์น๋ฅผ ์ฐพ์ต๋๋ค.
2. ์ถ๊ฐ๋ Leaf Node๊ฐ ์ฉ๋์ ์ด๊ณผํ์ง ์์๋ค๋ฉด ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํฉ๋๋ค.
๋ง์ฝ ์ฉ๋์ ์ด๊ณผํ์๋ค๋ฉด Split(๋ถํ )์ ์ํํ์ฌ์ผ ํฉ๋๋ค.
Split(๋ถํ )
Split์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๋๋ค.
์ถ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ์ฌ ์ค์๊ฐ์ ๊ฒฐ์ ํฉ๋๋ค.
์ค์๊ฐ์ ๋ถ๋ชจ ๋ ธ๋์ ์ถ๊ฐ์ํค๋ฉฐ ์ค์๊ฐ๋ณด๋ค ์์ ๊ฐ๋ค์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ, ์ค์๊ฐ๋ณด๋ค ํฐ ๊ฐ๋ค์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๊ฐ ๋ฉ๋๋ค.
๋ถ๋ชจ ๋ ธ๋๊ฐ ์๋ค๋ฉด ์๋ก ์์ฑํ๋ฉฐ,
๋ถ๋ชจ ๋ ธ๋์์๋ ์ฉ๋์ด ๊ฐ๋์ฐผ๋ค๋ฉด ๋๊ฐ์ด Split ํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
์์๋ฅผ ํตํด ์ค๋ช ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฐ์ ์ด๊ธฐ ์ํ์ ๋๋ค.
70 ์ฝ์
์ฐ์ ๊ธฐ๋ณธ ๊ท์น์ ๋ฐ๋ผ ๋ฐ๋์ ๋ฆฌํ ๋ ธ๋์ ์ฝ์ ํ์ฌ์ผ ํฉ๋๋ค.
Leaf Node๊ฐ 2-Node์ธ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์ฝ์ ํ์ฌ 3-Node๋ก ๋ง๋ญ๋๋ค.
์ฝ์ ํ์์ ๋ Left Key๊ฐ Right Key๋ณด๋ค ํฌ๋ค๋ฉด ์์น๋ฅผ ๋ฐ๊พธ์ด์ค๋๋ค.
30 ์ฝ์
๋ง์ฐฌ๊ฐ์ง๋ก Leaf Node์ ์ฝ์ ํฉ๋๋ค.
์ฝ์ ํ ๋ ๋ ธ๋๊ฐ ๊ฐ๋ ์ฐจ ์ฝ์ ํ ์ ์๋ ๊ฒฝ์ฐ Split์ ์ํํฉ๋๋ค.
์ฐ์ ํด๋น ๋ ธ๋์ ์ค๊ฐ๊ฐ์ ์ฐพ์ต๋๋ค.
ํด๋น ์ค๊ฐ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ก ํ๋ ์๋ธํธ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
๋์ด๋ฅผ ๋ง์ถ๊ธฐ ์ํด ์๋กญ๊ฒ ๋ง๋ ์๋ธ ํธ๋ฆฌ์ ๋ฃจํธ๋ฅผ ์ด๋ค์ ๋ถ๋ชจ ๋ ธ๋์ ํฉ์นฉ๋๋ค.
์ด๋ ๋ถ๋ชจ ๋ ธ๋๊ฐ 2-Node์ธ ๊ฒฝ์ฐ ๋ฐ๋ก ์ฝ์ ์ด ๊ฐ๋ฅํ๋,
3-Node์ธ ๊ฒฝ์ฐ ๋ถ๋ชจ ๋ ธ๋์์ ์ค๊ฐ๊ฐ์ ์ฐพ๊ณ ์๋ธํธ๋ฆฌ๋ฅผ ๋ง๋๋ ์์ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
60 ์ฝ์
๋ง์ฐฌ๊ฐ์ง๋ก Leaf Node์ ์ฝ์ ํฉ๋๋ค.
์ญ์
์ฐ์ ์ญ์ ์ ๊ฒฝ์ฐ Rotation(ํ์ )๊ณผ Merge(๋ณํฉ)์ ๊ฐ๋ ์ด ์ฌ์ฉ๋๋ฏ๋ก ์ด๋ถํฐ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Rotation (ํ์ )
์์๊ฐ ์ญ์ ๋๋ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก,
์ญ์ ๋๋ ๋ ธ๋์ ํ์ ๋ ธ๋์ ์์ ํ๋๋ฅผ ๋ถ๋ชจ ๋ ธ๋๋ก,
๋ถ๋ชจ ๋ ธ๋์ ์์ ํ๋๋ฅผ ์์ ์ ๋ ธ๋๋ก ๊ฐ์ ธ์ ํ์ ์ํค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ญ์ ๋๋ ๋ ธ๋์ ํ์ ๋ ธ๋์ค 3-Node๊ฐ ์๋ ๊ฒฝ์ฐ ํ์ (Rotation)์ด ๊ฐ๋ฅํฉ๋๋ค.
Merge (๋ณํฉ)
์์๊ฐ ์ญ์ ๋๋ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก,
์ญ์ ๋๋ ๋ ธ๋์ ์งํ ํ์ ๋ ธ๋(ํน์ ์ง์ ํ์ ๋ ธ๋)์ ์์ ์ฌ์ด์ ํฌํจ๋๋ ๋ถ๋ชจ ์์๋ฅผ ํฉ์น๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
merge ์ดํ ๋ ธ๋์ ์ฉ๋์ด ์ด๊ณผ๋์๋ค๋ฉด Split์ ์ํํฉ๋๋ค.
์ญ์ ๋๋ ๋ ธ๋์ ํ์ ๋ ธ๋์ค 3-Node๊ฐ ์๋ ๊ฒฝ์ฐ ๋ณํฉ(Merge)์ด ํ์ํฉ๋๋ค.
์ดํ ์ค๋ช ํ ๋ชจ๋ ์ํฉ์์, ๋ค์๊ณผ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค๊ณ ํ๊ฒ ์ต๋๋ค.
Non Leaf Node์ ์ญ์ ์, ์ญ์ ๋๋ Key์ Left Subtree์ ์ต๋๊ฐ์ผ๋ก ๋น์ด์๋ ๋ถ๋ถ์ ์ฑ์์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
RightSubtree์ ์ต์๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ ์ดํ ์กด์ฌํ๋ ๊ฐ๋ค์ ์ผ์ชฝ์ผ๋ก ํ์นธ์ฉ ๋น๊ฒจ์ฃผ์ด์ผ ํ์ง๋ง,
LeftSubtree์ ์ต๋๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ ๋ฐ๋ก ๊ฐ์ ธ์ฌ ์ ์๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ ๋๋ค.
Rotation์ ์ต์ข์ธก ์๋ธํธ๋ฆฌ๋ฅผ ์ ์ธํ๊ณ ๋ ๋ฐ๋์ ์ผ์ชฝ ํ์ ๋ ธ๋๋ฅผ ํ์ธํ์ฌ ๊ฐ๋ฅํ ๋๋ง ๋ฐ์ํ๋ค๊ณ ํ๊ฒ ์ต๋๋ค.
์ต์ข์ธก ์๋ธํธ๋ฆฌ๋ ํญ์ ์ผ์ชฝ ํ์ ๋ ธ๋๊ฐ ์์ผ๋ฏ๋ก ์ด ๊ฒฝ์ฐ์๋ง ํน๋ณํ๊ฒ ์ค๋ฅธ์ชฝ ํ์ ๋ ธ๋๋ฅผ ํ์ธํฉ๋๋ค.
์ด ๋ํ ๋ง์ฐฌ๊ฐ์ง๋ก ์ค๋ฅธ์ชฝ ํ์ ๋ ธ๋์์ Rotation์ ํ๋ ๊ฒฝ์ฐ ๊ฐ๋ค์ ํ์นธ์ฉ ๋น๊ฒจ์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ด๋ฏ๋ก ์์๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
Rotation์ ์ต์ข์ธก ์๋ธํธ๋ฆฌ๋ฅผ ์ ์ธํ๊ณ ๋ ๋ฐ๋์ ์ผ์ชฝ ํ์ ๋ ธ๋๋ฅผ ์ฐ์ ์ ์ผ๋ก ํ์ธ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ญ์ ์ 4๊ฐ์ง ์ํฉ
- 3-Node์ธ Leaf Node์ ์ญ์
- 2-Node์ธ Leaf Node์ ์ญ์
- 3-Node์ธ Non Leaf Node์ ์ญ์
- 2-Node์ธ Non Leaf Node์ ์ญ์
ํธ๋ฆฌ์์์ Non Leaf Node์ ์ญ์ ๋ ๋ชจ๋ Leaf Node์ ์ญ์ ํํ๋ก ๋ฐ๊ฟ์ฃผ์ด ์๊ฐํ ์ ์์ต๋๋ค.
3-Node์ธ Leaf Node์ ์ญ์
๊ฐ์ฅ ๊ฐ๋จํ ์ผ์ด์ค์ ๋๋ค.
๋ฐ๋ก ์ญ์ ํด์ค ํ, ๋จ์์๋ key๊ฐ rightKey์ธ ๊ฒฝ์ฐ ์์น๋ฅผ ์ฎ๊ฒจ์ค๋๋ค.
์๋๋ ์์์ ๋๋ค.
70 ์ญ์
90 ์ญ์
2-Node์ธ Leaf Node์ ์ญ์
ํด๋น ๊ฒฝ์ฐ ๋๊ฐ์ง ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํ์ ๋ ธ๋์ค 3-Node๊ฐ ์๋ ๊ฒฝ์ฐ
- ํ์ ๋ ธ๋์ค 3-Node๊ฐ ์๋ ๊ฒฝ์ฐ
์ญ์ ๋๋ ๋ ธ๋์ ํ์ ๋ ธ๋์ค 3-Node๊ฐ ์๋ ๊ฒฝ์ฐ ํ์ (Rotation)์ด ๊ฐ๋ฅํฉ๋๋ค.
์ญ์ ๋๋ ๋ ธ๋์ ํ์ ๋ ธ๋์ค 3-Node๊ฐ ์๋ ๊ฒฝ์ฐ ๋ณํฉ(Merge)์ด ํ์ํฉ๋๋ค.
Rotaion์ด ๊ฐ๋ฅํ๋ค๋ฉด Rotation์,
Rotation์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด Merge๋ฅผ ์ํํฉ๋๋ค.
์์ผ๋ก์ ์์์์๋ ์ต์ข์ธก๋ง ์ค๋ฅธ์ชฝ์ ๋ณด๊ณ , ๋๋จธ์ง๋ ์ผ์ชฝ ํ์ ๋ฅผ ๋ณธ ๋ค, rotation์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด merge ํ๊ฒ ์ต๋๋ค.
1. ์ญ์ ๋๋ 2-Node์ ํ์ ๋ ธ๋์ค 3-Node๊ฐ ์๋ ๊ฒฝ์ฐ
Leaf Node์์ ๊ฐ์ ์ ๊ฑฐํ ๋ค, ํ์ (Rotation)์ํต๋๋ค.
์ ํฌ๋ ์ต์ข์ธก ๋ ธ๋๋ฅผ ์ ์ธํ๊ณ ๋ ๋ฐ๋ก ์ผ์ชฝ ํ์ ๋ง ๋ณผ ๊ฒ์ด๊ธฐ์, ์ผ์ชฝ ํ์ ๊ฐ 3-Node๊ฐ ์๋๋ผ๋ฉด merge ํฉ๋๋ค.
2. ์ญ์ ๋๋ 2-Node์ ํ์ ๋ ธ๋์ค 3-Node๊ฐ ์๋ ๊ฒฝ์ฐ
Leaf Node์์ ๊ฐ์ ์ ๊ฑฐํ ๋ค, ํ์ (Rotation)์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ๋ณํฉ(merge)์ํต๋๋ค.
3-Node์ธ Non Leaf Node์ ์ญ์
Leaf Node์ ์ญ์ ํํ๋ก ๋ฐ๊พธ์ด ํด๊ฒฐํฉ๋๋ค.
2-Node์ธ Non Leaf Node์ ์ญ์
๋ง์ฐฌ๊ฐ์ง๋ก Leaf Node์ ์ญ์ ํํ๋ก ๋ฐ๊พธ์ด ํด๊ฒฐํฉ๋๋ค.
ํน์ ์ผ์ชฝ๋ง ๋ณธ๋ค๋ ์กฐ๊ฑด์ด ์๋ค๋ฉด ๋ค์๋ ๊ฐ๋ฅํฉ๋๋ค.
์ญ์ ๋ ์ฝ์ ์ด๋ ์ฌ๋ฌ๊ฐ์ง ํํ๋ก ๋ํ๋ ์ ์์ต๋๋ค.
'๐ฅ Computer Science > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] - B-Tree (0) | 2022.06.10 |
---|---|
[์๋ฃ๊ตฌ์กฐ] - AVL ํธ๋ฆฌ (0) | 2022.06.09 |
[์๋ฃ๊ตฌ์กฐ] - Hash(ํด์) (0) | 2022.06.07 |
[์๋ฃ๊ตฌ์กฐ] - ๋ฅ(Deap : Double Endeded Heap) (0) | 2022.06.07 |
[์๋ฃ๊ตฌ์กฐ] - ์ฐ์ ์์ ํ(Priority Queue) (0) | 2022.06.06 |