Red Black Tree

BST (์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‘” Tree.

๊ฐ ๋…ธ๋“œ๋Š” ๊ฐ’(key)๋ง๊ณ ๋„ ์ƒ‰์„ ๊ฐ–๊ณ  ์ƒ‰์€ ๋ ˆ๋“œ or ๋ธ”๋ž™ 2์ข…๋ฅ˜๋‹ค.

์‚ฝ์ž…, ์‚ญ์ œ, ํƒ์ƒ‰์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(log n)

RB Tree 4๊ฐ€์ง€ ์กฐ๊ฑด

1. Root Property : ๋ฃจํŠธ(root)๋…ธ๋“œ๋Š” ๋ธ”๋ž™(black)์ด๋‹ค.
2. External Property : ๋ชจ๋“  ์™ธ๋ถ€ ๋…ธ๋“œ (external node)๋Š” ๋ธ”๋ž™์ด๋‹ค.
3. Depth Property : ๋ชจ๋“  ๋‹จ๋ง ๋…ธ๋“œ(leaf node)์˜ ๊ฒฝ์šฐ ๋ฃจํŠธ๋ถ€ํ„ฐ ์™ธ๋ถ€ ๋…ธ๋“œ ๊นŒ์ง€ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ธ”๋ž™ ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค.
4. Internal Property : ๋นจ๊ฐ• ๋…ธ๋“œ์˜ ์ž์‹์€ ๋ธ”๋ž™์ด๋‹ค.
    == No Double Red :๋ ˆ๋“œ ๋…ธ๋“œ๋Š” ๋‘๊ฐœ๊ฐ€ ์—ฐ์†ํ•ด์„œ ์˜ฌ ์ˆ˜ ์—†๋‹ค.

ํŠน์ง•

  • BST์˜ ๋ชจ๋“  ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค.

  • ๋…ธ๋“œ์˜ ์ž์‹์ด ์—†๋Š” ๊ฒฝ์šฐ ์ž์‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋Š” NULL๊ฐ’์„ ์ €์žฅ ( NULL์„ leaf node๋กœ ๊ฐ„์ฃผ)

  • ๋ฃจํŠธ ๋…ธ๋“œ ๋ถ€ํ„ฐ ๋‹จ๋ง ๋…ธ๋“œ(leaf node)๊นŒ์ง€ ๋ชจ๋“  ๊ฒฝ๋กœ ์ค‘ ์ตœ์†Œ ๊ฒฝ๋กœ์™€ ์ตœ๋Œ€ ๊ฒฝ๋กœ์˜ ํฌ๊ธฐ ๋น„์œจ์€ 2๋ณด๋‹ค ํฌ์ง€ ์•Š๋‹ค. ( balanced ์ƒํƒœ )

์‚ฌ์šฉ์˜ˆ

  • Java Collection์˜ ArrayList

  • HashMap์˜ Separate Chaining

  • C++ map

์žฅ์  (ํ•ด์‰ฌ์™€ ๋น„๊ตํ•ด์„œ)

  • ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์ž๋ฃŒ์ผ ๊ฒฝ์šฐ ์ข‹๋‹ค. ( ํ•ด์‰ฌ๋Š” ์ˆœ์„œ๊ฐ€ ์—†์Œ )

  • ์ผ๊ด€์„ฑ์žˆ๋Š” ํผํฌ๋จผ์Šค๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ( ํ•ด์‰ฌ๋Š” rehashing์‹œ ๋น„์ •์ƒ์  ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ )

  • ํ•ด์‰ฌ๋Š” ํŽ˜์ด์ง€ํดํŠธ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

  • ์—ฐ์†๋œ ์‚ฝ์ž…๊ฐ„์˜ ๊ณต๊ฐ„ ์ง€์—ญ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์‰ฝ๋‹ค. ( ๋” ์ ์€ I/O ๋ฐœ์ƒ)

  • ํŠธ๋ฆฌ๋Š” ๋ถ€์ •ํ™•ํ•œ ๊ฒ€์ƒ‰์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

๊ตฌํ˜„

  • Insert ( ์‚ฝ์ž… )

  • Delete ( ์‚ญ์ œ )

  • Search ( ํƒ์ƒ‰ )

์ฝ”๋“œ ๋ณด๊ธฐ(c++)

์‹œ๊ฐ„ ๋ณต์žก๋„

์ผ๋ฐ˜ BST์˜ skewdํ•œ ๊ฒฝ์šฐ๋ฅผ balancing๊ธฐ๋ฒ•์„ ํ†ตํ•ด balancedํ•œ tree๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฏ€๋กœ ํƒ์ƒ‰๊ณผ์ •์€ ์›ํ•˜๋Š” ๋Œ€๋กœ O(lgn)์ด ๋‚˜์˜จ๋‹ค. ์‚ฝ์ž…์€ ์ผ๋ฐ˜ BST์—์„œ ์ตœ๋Œ€ 2๋ฒˆ์˜ rotate๊ณผ์ •๊ณผ ์ƒ‰ ๋ณ€ํ™˜์ด ์ถ”๊ฐ€ ๋˜์—ˆ๋Š” ๋ฐ, rotate๊ณผ์ •์€ ํฌ์ธํ„ฐ๋ณ€์ˆ˜๋ฅผ ๊ตํ™˜ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ์ƒ‰๋ณ€ํ™˜๋„ ๋‹จ์ˆœํ•œ ๋ณ€์ˆ˜๊ฐ’ ๋ณ€๊ฒฝ์ด๋ฏ€๋กœ O(1)์˜ ์ƒ‰ ๋ณ€ํ™˜์ด O(lgn)๋ฒˆ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์—, O(lgn)์„ ๊ฐ–๋Š”๋‹ค. ์‚ญ์ œ๋„ ์‚ฝ์ž…๊ณผ ๋™์ผํ•œ ์ด์œ ์ด๋ฉฐ, rotate๊ณผ์ •์€ ์ตœ๋Œ€ 3๋ฒˆ์ด O(lgn)๋ฒˆ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— O(lgn)์ด ๋‚˜์˜จ๋‹ค.

Last updated