๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
SW์‚ฌ๊ด€ํ•™๊ต ์ •๊ธ€/๊ฐœ๋ฐœ์ผ์ง€ - TIL

[Week05] C์–ธ์–ด - Red Black Tree

by young-ji 2022. 5. 5.
Red - Black Tree
๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ

 

https://ko.wikipedia.org/wiki/๋ ˆ๋“œ-๋ธ”๋ž™_ํŠธ๋ฆฌ

 

๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ(red-black tree)๋Š” ์ž๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(self-balancing binary search tree)๋กœ์„œ, ๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” ์—ฐ๊ด€ ๋ฐฐ์—ด ๋“ฑ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์“ฐ์ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค. 1978๋…„ ๋ ˆ์˜ค ๊ท€๋ฐ”์Šค(Leo J. Guibas)์™€ ๋กœ๋ฒ„ํŠธ

ko.wikipedia.org

 

์ด์ง„ ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ํ•œ ์ข…๋ฅ˜

BTS์˜ worst case์˜ ๋‹จ์ ์„ ๊ฐœ์„  - ์Šค์Šค๋กœ ๊ท ํ˜•์„ ๋งž์ถ”๋ฉฐ ํŽธํ–ฅ๋œ ํŠธ๋ฆฌ๊ฐ€ ๋˜์ง€์•Š๋„๋ก ํ•œ๋‹ค.

์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(logN)

 

๊ทœ์น™

  1. ๋ ˆ๋“œ์™€ ๋ธ”๋ž™์œผ๋กœ๋งŒ ์ด๋ฃจ์›Œ์ง„๋‹ค.
  2. ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ๋ธ”๋ž™์ด๋‹ค.
  3. nil๋…ธ๋“œ๋Š” ๋ธ”๋ž™์ด๋‹ค.
  4. ๋ ˆ๋“œ์˜ ์ž์‹์€ ๋ ˆ๋“œ๋งŒ ์˜ฌ์ˆ˜์žˆ๋‹ค.
  5. ์ž„์˜์˜ ๋…ธ๋“œ์—์„œ ์ž์† nil ๋…ธ๋“œ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ์˜ ๋ธ”๋ž™ ๋…ธ๋“œ์ด ๊ฐœ์ˆ˜๋Š” ๊ฐ™๋‹ค. (์ž๊ธฐ์ž์‹  ์ œ์™ธ)

 

๊ท ํ˜•์„ ๋งž์ถ˜ ํŠธ๋ฆฌ์—์„œ ๋‘ ์ž๋…€๊ฐ€ ๊ฐ™์€ ์ƒ‰์„ ๊ฐ€์งˆ๋•Œ ๋ถ€๋ชจ์™€ ๋‘ ์ž๋…€์˜ ์ƒ‰์„ ๋ฐ”๊ฟ”์ค˜๋„ 5๋ฒˆ ์†์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.

 

Black height

์ž„์˜์˜ ๋…ธ๋“œ์—์„œ ์ž์† nill๋…ธ๋“œ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ์˜ ๋ธ”๋ž™ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜

 

ํšŒ์ „

ํšŒ์ „์„ ํ•˜๋Š” ์ด์œ ๋Š” ํŽธํ–ฅ๋œ ํŠธ๋ฆฌ๊ฐ€ ๋˜์ง€์•Š๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด ๊ฐ’์„ ๋„˜๊ธฐ๋ ค๋Š”๋ฐ BST ํŠน์ง• ๋˜ํ•œ ์œ ์ง€ํ•˜๋ฉด์„œ ๋„˜๊ธฐ๊ธฐ ์œ„ํ•ด ํšŒ์ „์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

์‚ฝ์ž…

  • ์ผ๋ฐ˜์ ์ธ BST(์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ)์™€ ๋™์ผํ•˜๊ฒŒ ์‚ฝ์ž…

์‚ฝ์ž…ํ•˜๋Š” ๋…ธ๋“œ์ด ์ƒ‰์ƒ์œ ํ•ญ์ƒ red๋กœ ํ•œ๋‹ค.  >>  5๋ฒˆ ๊ทœ์น™์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด

 

  • ์‚ฝ์ž… ํ›„ ์œ„๋ฐ˜ ์—ฌ๋ถ€ ํ™•์ธ ํ›„ ๊ท ํ˜• ๋งž์ถ”๊ธฐ - 4,2๋ฒˆ ๊ทœ์น™ ์œ„๋ฐ˜ ๊ฐ€๋Šฅ

1. 4๋ฒˆ ์†์„ฑ์œ„๋ฐ˜์— ๋”ฐ๋ฅธ 3๊ฐ€์ง€ case

 

case 3 : ์‚ฝ์ž…ํ•œ ๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ์˜ ์™ผ์ชฝ ์ž๋…€์ผ๋•Œ ๋ถ€๋ชจ๋„ red์ด๋ฉฐ ํ• ์•„๋ฒ„์ง€์˜ ์™ผ์ชฝ ์ž๋…€ & ์‚ผ์ดŒ ๋…ธ๋“œ๊ฐ€ black ์ผ๋•Œ

   ๋ถ€๋ชจ์™€ ํ• ์ด๋ฒ„์ง€์˜ ์ƒ‰์„ ๋ฐ”๊ฟ”์ค€ ๋‹ค์Œ ํ• ์•„๋ฒ„์ง€ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ™”์ „

 

case 2 : ๋ถ€๋ชจ์˜ ์˜ค๋ฅธ์ชฝ ์ž๋…€์ด๋ฉฐ(๊บฝ์ธ ๋ถ€๋ถ„), ๋ถ€๋ชจ๋„ red๊ณ  ํ• ์•„๋ฒ„์ง€์˜ ์™ผ์ชฝ ์ž๋…€์ด๋ฉฐ ์‚ผ์ดŒ๋…ธ๋“œ๊ฐ€ black ์ผ๋•Œ

  ๊บฝ์ธ ๋ถ€๋ถ„์„ ํŽผ์นœํ›„(๋ถ€๋ชจ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „) case3๊ณผ ๋™์ผํ•˜๊ฒŒ ํ•ด๊ฒฐํ•œ๋‹ค.

case 1 : ์‚ผ์ดŒ์ด black์ผ๋•Œ (red๊ฐ€ ํ•œ์ชฝ์œผ๋กœ ๋ชฐ๋ ค์žˆ์ง€์•Š๋‹ค.)

  ์ž๋…€์˜ ์ƒ‰์ด ๋‘˜๋‹ค ๊ฐ™์œผ๋ฉด ๋ถ€๋ชจ์˜ ์ƒ‰๊ณผ ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•˜๋‹ค - ํŠธ๋ฆฌ์˜ ๊ทœ์น™

 

 

2. 2๋ฒˆ ์†์„ฑ์œ„๋ฐ˜์‹œ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ์ƒ‰์„ black์œผ๋กœ ๋ณ€๊ฒฝ

 

์‚ญ์ œ

  • ์ผ๋ฐ˜์ ์ธ BTS์™€ ๋™์ผํ•˜๊ฒŒ ์‚ญ์ œ

์‚ญ์ œ ๋…ธ๋“œ์˜ ์ž๋…€์˜ ์ˆ˜์— ๋”ฐ๋ฅธ ํ™•์ธ

 - ์—†๊ฑฐ๋‚˜ ํ•˜๋‚˜๋ผ๋ฉด ์‚ญ์ œ๋˜๋Š” ๋…ธ๋“œ ๋ณธ์ธ ์ƒ‰ ์‚ญ์ œ

 - ๋‘๋ช…์ด๋ฉด ์‚ญ์ œ๋˜๋Š” successor(๋‚˜๋ณด๋‹ค ์ž‘์€ ์ˆ˜ ์ค‘ ์ œ์ผ ํฐ ์ˆ˜)์˜ ์ƒ‰ ์‚ญ์ œ

  • ์‚ญ์ œ ํ›„ ์œ„๋ฐ˜ ์—ฌ๋ถ€ ํ™•์ธ ํ›„ ๊ท ํ˜•๋งž์ถ”๊ธฐ

์–ด๋–ค ์ƒ‰์ด ์‚ญ์ œ๋˜๋Š”์ง€์— ๋”ฐ๋ผ ์œ„๋ฐ˜์—ฌ๋ถ€ ํ™•์ธ

  1. ์‚ญ์ œ๋˜๋Š” ์ƒ‰์ด red์ผ ๊ฒฝ์šฐ ์–ด๋–ค ์†์„ฑ๋„ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  2. ์‚ญ์ œ๋˜๋Š” ์ƒ‰์ด Black์ผ ๊ฒฝ์šฐ : 2,4,5 ๊ทœ์น™ ์œ„๋ฐ˜ ๊ฐ€๋Šฅ

๊ทธ ์ค‘ 5๋ฒˆ ์†์„ฑ์„ ํ•ญ์ƒ ์œ„๋ฐ˜ํ•˜๊ฒŒ ๋œ๋‹ค.

5๋ฒˆ ์†์„ฑ์„ ๋‹ค์‹œ ๋งŒ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ๋Œ€์ฒด๋…ธ๋“œ์— extra black์„ ๋ถ€์—ฌํ•œ๋‹ค.

red and black์˜ ๊ฒฝ์šฐ : black์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. (4,5๋ฒˆ ์†์„ฑ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๊ฒŒ๋จ)

doubly black์˜ ๊ฒฝ์šฐ : ๋…ธ๋“œ์˜ ํ˜•์ œ์˜ ์ƒ‰๊ณผ ํ˜•์ œ์˜ ์ž์‹์˜ ์ƒ‰์— ๋”ฐ๋ผ 4๊ฐ€์ง€ case

 

 

case 4 : ์˜ค๋ฅธ์ชฝ ํ˜•์ œ๊ฐ€ black์ด๊ณ , ๊ทธ ํ˜•์ œ์˜ ์˜ค๋ฅธ์ชฝ ์ž๋…€๊ฐ€ red์ผ๋•Œ

  ํ•ด๋‹น red๋ฅผ doublely black์œ„๋กœ ์˜ฎ๊ธดํ›„์— extra black์„ ์˜ฎ๊ฒจ red and black์„ ๋งŒ๋“ค์–ด ํ•ด๊ฒฐํ•œ๋‹ค.

 

(1) ํŠธ๋ฆฌ ๊ทœ์น™์— ๋”ฐ๋ผ C, E ์™€ D์˜ ์ƒ‰์„ ๋ฐ”๊ฟ” red๋ฅผ D๋กœ ์˜ฏ๊ธด๋‹ค. - C๊ฐ€ ๋ญ”์ง€๋ชจ๋ฅด๋‹ˆ๊นŒ C์—๊ฒŒ extra black์„ ๋ถ€์—ฌํ•œ๋‹ค.

(2) B์™€ D(red)์˜ ์ƒ‰์„ ๋ฐ”๊ฟ”์ค€ํ›„ B๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ํ•œ๋‹ค.

(3) A,C์˜ extra black์„ B๋กœ ์˜ฏ๊ฒจ์ค€๋‹ค. B๊ฐ€ red and black์˜ ๋˜๋ฉฐ ํ•ด๊ฒฐ๋œ๋‹ค.

 

case 3 : ์˜ค๋ฅธ์ชฝ ํ˜•์ œ๊ฐ€ black์ด๊ณ , ๊ทธ ์™ผ์ชฝ ์ž๋…€๊ฐ€ red / ์˜ค๋ฅธ์ชฝ ์ž๋…€๊ฐ€ black ์ผ๋•Œ

  ํ˜•์ œ์˜ ์˜ค๋ฅธ์ชฝ ์ž๋…€๋ฅผ red๊ฐ€ ๋˜๊ฒŒ ๋งŒ๋“ค์–ด์„œ case4 ์ ์šฉํ•œ๋‹ค.

(1) C์™€ D์˜ ์ƒ‰์„ ๋ฐ”๊พผํ›„ D๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „ํ•œ๋‹ค.

(2) case4๋ฅผ ์ ์šฉํ•œ๋‹ค.

 

 

case 2 : ์˜ค๋ฅธ์ชฝ ํ˜•์ œ๊ฐ€ black์ด๊ณ , ํ˜•์ œ์˜ ๋‘ ์ž๋…€๋„ black์ผ๋•Œ

   doubly black๊ณผ ๊ทธ ํ˜•์ œ๋ฅผ black์„ ๋ถ€๋ชจ๋…ธ๋“œ์—๊ฒŒ extra black์„ ๋„˜๊ธด๋‹ค.

   B์˜ ๋…ธ๋“œ๊ฐ€ doubly black์ด ๋๋‹ค๋ฉด ๋‹ค์‹œ ๋ฐ˜๋ณต

 

 

case 1 : ์˜ค๋ฅธ์ชฝ ํ˜•์ œ๊ฐ€ black์ธ ๊ฒฝ์šฐ

   ๋ถ€๋ชจ์™€ ํ˜•์ œ์˜ ์ƒ‰์„ ๋ฐ”๊พธ๊ณ  ๋ถ€๋ชจ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ํ•œ๋’ค case ์ค‘ ํ•˜๋‚˜๋กœ ํ•ด๊ฒฐ

 

 

 

์ฐธ๊ณ  ์ž๋ฃŒ

Introduction To Algorithms - ํ•œ๋น›์•„์นด๋ฐ๋ฏธ ์ถœํŒ

์‹ ์ฐฌ์ˆ˜ ๊ต์ˆ˜๋‹˜ https://youtu.be/SHdYv41iCmE

์‰ฌ์šด์ฝ”๋“œ https://youtu.be/2MdsebfJOyM

 

์ฝ”๋“œ

๊นƒํ—ˆ๋ธŒ https://github.com/youngjijang/rbtree-lab

๋Œ“๊ธ€