[Rust] B-Tree
์ค์ ๋ก ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค ๋ณด๋ฉด ํค-๋ฐธ๋ฅ ๋งต ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์ผ์ด ๋งค์ฐ ๋ง๋ค.
๊ทธ๋ฆฌ๊ณ ๋งต์๋ 2๊ฐ์ง ๋๋ถ๋ฅ๊ฐ ์๋๋ฐ, ๋ฐ๋ก ordered map๊ณผ unordered map์ด ๊ทธ๊ฒ์ด๋ค.
ordered map์ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌ๋ ํํ๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์กฐํ/์ถ๊ฐ/์ญ์ ์ฑ๋ฅ์ด ํ๋ฒํ log N์ธ ๋์ ์ ์ ๋ ฌ๋ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ข๋ค.
unordered map์ ์ผ๋ฐ์ ์ผ๋ก ํด์ํ ์ด๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋๋ค. ์กฐํ/์ถ๊ฐ/์ญ์ ์ฑ๋ฅ์ด O(1)์ธ ๋์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌ๋ ํํ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ธ์ด์ ๋ด์ฅ๋ ordered map์ ๋ณดํต tree๋ก ๊ตฌํ๋๊ณ , ๊ทธ ์ค์์๋ red black ํธ๋ฆฌ๋ก ๊ตฌํ๋๋๊ฒ ๊ตญ๋ฃฐ์ด์๋ค. ๋ํ์ ์ผ๋ก C++์
๊ทผ๋ฐ Rust์ ๋ด์ฅ ordered map ๊ตฌํ์ฒด๋ ๋ด์ฅ๋ชจ๋๋ก์๋ ๋๋ฌผ๊ฒ B-Tree๋ค. ์ค์ ๋ก ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ฐจ์๊ฐ 12๋ก ๊ณ ์ ๋์ด์๋ B-Tree๋๋ผ.
ํ์ค ๋ฌธ์๋ ์ด์๋ค์ ๋ณด๋ฉด, ๋ ๋๋ธ๋์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๋ฌด ๋ถ์ฐ๋์ด์ ์บ์์ต์ ํ๊ฐ ๊ตฌ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋น๊ต์ ๋ฉ๋ชจ๋ฆฌ ํํธํ๊ฐ ์ ์ B-Tree๋ก ์ ํํ๋ค๋ ๊ฒ ๊ฐ๋ค.
๋ฆฌ๋ฐธ๋ฐ์ฑ๋ ๋น๋๊ฐ ๋ํ๊ณ .
BTree๋ฅผ ์ฑํํ ๊ฐ๋ตํ ์๊ฐ๋ ์๋ ๋ฌธ์ ์๋์ ์ ํ์๊ณ
https://doc.rust-lang.org/beta/std/collections/struct.BTreeMap.html
์ด๋ฐ์ ๋ฐ ํ์คํ ๋ฆฌ๋ ์๋ ์ด์์ ์๋ค.
https://github.com/rust-lang/rust/issues/4992
๋
ผ๋ฌธ์ฒ๋ผ ์ ๋ฆฌํด๋๊ฑฐ
https://cglab.ca/~abeinges/blah/rust-btree-case/