[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/