๐Ÿ”ดโšซ๏ธ Red-Black Tree๊ฐ€ ๋ญ˜๊นŒ?

์„คํ˜„์•„ยท2025๋…„ 4์›” 18์ผ

ํ•™๋ถ€ ๋•Œ ์‚ด์ง ์ฝ์—ˆ๋‹ค๊ฐ€ ๋„๋ง์ณค๋˜ RB Tree...
์ˆ˜๋งŽ์€ Tree ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘์—์„œ๋„ ํ˜„์‹ค์„ธ๊ณ„์—์„œ ์žฆ๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค. ์žฆ๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋Š” ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๊ฒ ๋‹ค.
์–ด๋–ค ๋ถ€๋ถ„์—์„œ ํšจ์œจ์ ์ธ๊ฑธ๊นŒ?

Red-Black Tree?

RB Tree๋Š” ์‚ฝ์ž…๊ณผ ์‚ญ์ œ, ๊ฒ€์ƒ‰ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๋ณด์žฅํ•œ๋‹ค.

์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ฐ™์ด ์‹œ๊ฐ„์— ๋ฏผ๊ฐํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.
ํ•˜๋‚˜์˜ ์˜ˆ๋กœ, Linux ์ปค๋„์˜ Completely Fair Scheduler ์™€ epoll ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ RB Tree๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

RB Tree๋Š” ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌBST์˜ ์ผ์ข…์œผ๋กœ ๊ฒ€์ƒ‰ ์—ฐ์‚ฐ์€ BST์™€ ๋™์ผํ•˜๊ฒŒ ์ด๋ฃจ์–ด์ง„๋‹ค.
์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋Š” ๋‹ค์†Œ ๊นŒ๋‹ค๋กœ์šด ํŽธ์ด๋ผ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๊ฐ๊ฐ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ณ , ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ฐœ๋…, ์‚ฌ์šฉํ•˜๋Š” ์ด์œ , ํŠน์ง•์„ ์œ„์ฃผ๋กœ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž!

Red-Black Tree๋Š” ๊ท ํ˜• ํŠธ๋ฆฌ๋‹ค.

๊ท ํ˜•ํŠธ๋ฆฌ Self-Balancing Binary Tree๋Š” ์™œ ๋“ฑ์žฅํ–ˆ์„๊นŒ?
์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ BST๋ฅผ ๊ธฐ์–ตํ•˜๋Š”๊ฐ€? ์•ž์„œ ์–ธ๊ธ‰ํ•œ BST๋ฅผ ์•Œ๊ณ ์žˆ์–ด์•ผ RB Tree๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด ์žˆ๋‹ค. ์ตœ์•…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด๋ผ๋Š” ์ ์ด๋‹ค.
์™œ์ผ๊นŒ?

๋…ธ๋“œ๊ฐ€ ํ•œ ์ชฝ์œผ๋กœ ํŽธํ–ฅ๋˜๊ฒŒ ์ถ”๊ฐ€๋œ๋‹ค๋ฉด ํ•œ์ชฝ์œผ๋กœ ์ญˆ์šฑ ๋Š˜์–ด์ง„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค. ์ด๋Š” ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ ๋‹ค๋ฅผ ๋ฐ” ์—†๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
์ด๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ?

ํ•œ์ชฝ์œผ๋กœ ์ฃผ์šฑ ๋Š˜์–ด์ง€๊ธฐ ์ „์— ๊ธธ์ด๋ฅผ ์กฐ์ •ํ•ด์ฃผ๋ฉด ์–ด๋–จ๊นŒ?
์ด๋ ‡๊ฒŒ ํƒ„์ƒ๋œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ท ํ˜• ํŠธ๋ฆฌSelf-Balancing Binary Tree๋ผ๊ณ  ํ•œ๋‹ค.

Red-Black Tree๋Š” AVL ๋ณด๋‹ค ์‚ฝ์ž…/์‚ญ์ œ ์—ฐ์‚ฐ์— ํšจ์œจ์ ์ด๋‹ค.

๊ท ํ˜• ํŠธ๋ฆฌSelf-Balancing Binary Tree์—๋Š” ํฌ๊ฒŒ ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.
1. AVL
2. Red-Black Tree

๋‘˜ ๋‹ค ๊ท ํ˜• ํŠธ๋ฆฌ๋กœ ์‹œ๊ฐ„๋ณต์žก๋„ O(logN)์„ ๋ณด์žฅํ•œ๋‹ค.

ํ‰๊ท ์˜ ์‹œ๊ฐ„๋ณต์žก๋„์ตœ์•…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„
insertO(logN)O(logN)
deleteO(logN)O(logN)
searchO(logN)O(logN)

ํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค.

AVL์€ ๊ท ํ˜• ์žก๋Š” ๋ฐฉ์‹์ด RB Tree ๋ณด๋‹ค ๊นŒ๋‹ค๋กญ๋‹ค. ๊นŒ๋‹ค๋กœ์šด ์กฐ๊ฑด์œผ๋กœ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ํ•  ๋•Œ๋Š” RB Tree ๋ณด๋‹ค ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์‚ฝ์ž…/์‚ญ์ œ ์—ฐ์‚ฐ ์‹œ์—๋Š” RB Tree ๋ณด๋‹ค ๋” ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. RB Tree๋Š” AVL ๋ณด๋‹ค ๋А์Šจํ•œ ์กฐ๊ฑด์œผ๋กœ ๊ทธ๋งŒ์˜ ์†์„ฑ์„ ๋งŒ์กฑ์‹œํ‚ค๋ฉด ์—ฐ์‚ฐ์„ ๋งˆ์น˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!

๋”ฐ๋ผ์„œ
๊ฒ€์ƒ‰์ด ๋Œ€๋ถ€๋ถ„์ธ ์ƒํ™ฉ(dictionary ๋“ฑ์—์„œ๋Š” ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด๋‘๊ณ  ์กฐํšŒ๋ฅผ ์žฆ๊ฒŒ ํ•œ๋‹ค.)์—์„œ๋Š” AVL์„ ์‚ฌ์šฉํ•˜๊ณ ,
์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์žฆ์€ ์ƒํ™ฉ(Java TreeMap, C++ std::map ๋“ฑ)์—์„œ๋Š” Red-Black Tree๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Š” ํฐ ์ฐจ์ด๊ฐ€ ์—†์–ด์„œ ๋ณดํ†ต RB Tree๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋‹ˆ ์•Œ์•„๋‘์ž!

Red-Black Tree๋Š” ์–ด๋–ป๊ฒŒ ๊ท ํ˜•์„ ์œ ์ง€ํ• ๊นŒ?

5๊ฐœ์˜ ์†์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ทธ ์†์„ฑ์ด ์œ„๋ฐฐ๋  ๋•Œ๋งˆ๋‹ค ์žฌ์กฐ์ •์„ ํ†ตํ•ด ๊ท ํ˜•์„ ์œ ์ง€ํ•œ๋‹ค.

RB Tree์˜ ์†์„ฑ

  1. ๋ชจ๋“  ๋…ธ๋“œ๋Š” red ํ˜น์€ black ์˜ ์ƒ‰์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.(1 bit)
  2. root ๋…ธ๋“œ๋Š” black์ด๋‹ค.
  3. ๋ชจ๋“  NIL(leaf ๋…ธ๋“œ)๋Š” black์ด๋‹ค.
  4. red ๋…ธ๋“œ๋Š” ์—ฐ๋‹ฌ์•„ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์—†๋‹ค.(red ๋…ธ๋“œ์˜ ์ž์‹ ์–‘์ชฝ์€ ์–ธ์ œ๋‚˜ black)
  5. ์ž„์˜์˜ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ NIL ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ์˜ black ์ˆ˜๋Š” ๊ฐ™๋‹ค.(๋ณธ์ธ ์ œ์™ธ)

NIL ๋…ธ๋“œ๋ž€?

๊ท ํ˜•์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด leaf ๋…ธ๋“œ๋ฅผ black ์ƒ‰์„ ๊ฐ€์ง„ ๋…ธ๋“œ๋กœ ๋ณด๋Š” ๊ฒƒ์ด๋‹ค.

์œ„ ๊ทธ๋ฆผ์—์„œ leaf ๋…ธ๋“œ๋ฅผ ๋ณด๋ฉด ๋์ž„์„ ์˜๋ฏธํ•˜๋Š” NIL ๋…ธ๋“œ๊ฐ€ ๋ถ™์–ด์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
ํŽธ์˜์ƒ ๊ทธ๋ฆผ์—์„œ ์ƒ๋žตํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ ๋Š˜! leaf ๋…ธ๋“œ์—๋Š” NIL์ด ๋ถ™์–ด์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์žŠ์œผ๋ฉด ์•ˆ ๋œ๋‹ค.
NIL ๋…ธ๋“œ๋Š” RB Tree์˜ ์†์„ฑ ์ค‘ 5๋ฒˆ ์†์„ฑ์„ ์œ„ํ•ด ์กด์žฌํ•˜๋ฉฐ, ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.

์ด์—์„œ ํŒŒ์ƒ๋˜๋Š” ๊ทœ์น™

- 5๋ฒˆ ์†์„ฑ์„ ๋งŒ์กฑํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‘ ์ž๋…€๊ฐ€ ๊ฐ™์€ ์ƒ‰์„ ๊ฐ€์งˆ ๋•Œ, ๋ถ€๋ชจ์™€ ๋‘ ์ž๋…€์˜ ์ƒ‰์„ ๋ฐ”๊ฟ”๋„ ์—ฌ์ „ํžˆ ์†์„ฑ์„ ๋งŒ์กฑํ•œ๋‹ค.

- ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ์ฃผ๋กœ 4๋ฒˆ, 5๋ฒˆ ์†์„ฑ์— ์œ„๋ฐฐ๋˜๋ฉฐ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๊ท ํ˜•์ด ์œ ์ง€๋œ๋‹ค.

- ์‚ญ์ œ๋˜๋Š” ๋…ธ๋“œ์˜ ์ƒ‰์ด black์ด๋ฉด ๋ณดํ†ต 5๋ฒˆ ๊ทœ์น™์ด ์œ„๋ฐฐ๋œ๋‹ค.

- ์ถ”๊ฐ€๋˜๋Š” ๋…ธ๋“œ๋Š” ํ•ญ์ƒ red์˜ ์ƒ‰์„ ๊ฐ€์ง„๋‹ค.

์ด ์†์„ฑ๊ณผ ๊ทœ์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ ํ…Œ๋‹ˆ ์ž˜ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค.

profile
์–ด์„œ์˜ค์„ธ์š”! โ˜บ๏ธ ํ›„ํšŒ ์—†๋Š” ๋‚ด์ผ์„ ์œ„ํ•ด ์˜ค๋Š˜์„ ์—ด์‹ฌํžˆ ์‚ด์•„๊ฐ€๋Š” ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€