๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜/์ž๋ฃŒ๊ตฌ์กฐ ์ด๋ก 

๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ (by ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ)

by sh119 2024. 7. 12.

๐Ÿ‘ฉ‍๐Ÿ’ป  ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ๋ž€?

๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ๋ž€? ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ขŒ์šฐ ์„œ๋ธŒ ํŠธ๋ฆฌ ๋†’์ด๊ฐ€ 1์ด์ƒ ์ฐจ์ด ๋‚˜์ง€ ์•Š๋Š” ํŠธ๋ฆฌ์ด๋‹ค. 

 

โœ๏ธ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ํŽธํ–ฅ ๋ฐœ์ƒ

๊ฒฝ์šฐ 1) ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์— ์‚ฝ์ž… ๋˜๋Š” ์ˆœ์„œ : 20 -> 10 -> 30 -> 5 ์ธ ๊ฒฝ์šฐ์—๋Š” ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ๋œ๋‹ค.

๊ฒฝ์šฐ 2) ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์— ์‚ฝ์ž… ๋˜๋Š” ์ˆœ์„œ : 5 -> 10 -> 20 -> 30 ์ธ ๊ฒฝ์šฐ์—๋Š” ์‚ฌํ–ฅ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ๋œ๋‹ค.

 

โœ๏ธ Balanced Binary Search Tree

๋…ธ๋“œ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚  ๋•Œ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋„๋ก ํ•˜๋Š” ํŠธ๋ฆฌ

 

์ข…๋ฅ˜ :

  1. AVLํŠธ๋ฆฌ
  2. Red-Black ํŠธ๋ฆฌ

 

โœจ AVL ํŠธ๋ฆฌ

  • ๋…ธ๋“œ๊ฐ€ ์‚ฝ์ž…, ์‚ญ์ œ ๋  ๋•Œ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์„ ์ฒดํฌํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ํŠธ๋ฆฌ
  • ๊ฐ ๋…ธ๋“œ์˜ BF๋ฅผ [-1, 0, 1] ๋งŒ ๊ฐ€์ง€๊ฒŒ ํ•˜์—ฌ ๊ท ํ˜•์„ ์œ ์ง€
  • BF[Balance Factor]
     ใ„ด ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๋†’์ด - ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๋†’์ด

๐Ÿ’ซ AVLํŠธ๋ฆฌ์˜ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ 

1. ๊ท ํ˜•์ด ๊นจ์ง„ ๊ฒฝ์šฐ : 

  • BF๊ฐ€ '+' ์ด๋ฉด ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์— ์ด์ƒ์ด ์žˆ์Œ
  • BF๊ฐ€ '-' ์ด๋ฉด ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์— ์ด์ƒ์ด ์žˆ์Œ

2.  ํšŒ์ „ ์—ฐ์‚ฐ : 

  • ๋‹จ์ˆœ ํšŒ์ „ - LL, RR
  • ์ด์ค‘ ํšŒ์ „ - LR, RL

2-1)

  • LL (Left-Left) 
    • ํšŒ์ „ 1ํšŒ 
    • ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „
  • RR (Right-Right)
    • ํšŒ์ „ 1ํšŒ 
    • ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „
  • LR (Left-Right)
    • ํšŒ์ „ 2ํšŒ
    • RR ํšŒ์ „ ํ›„ LL ํšŒ์ „ (์™ผ์ชฝ์œผ๋กœ ๋ฐฉํ–ฅ ํšŒ์ „ ํ›„(์•„๋ž˜๋ถ€๋ถ„์„) ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐฉํ–ฅ ํšŒ์ „)
  • RL (Right-Left)
    • ํšŒ์ „ 2ํšŒ
    • LLํšŒ์ „ ํ›„ RRํšŒ์ „ 

 

 

โœจ Red-Black ํŠธ๋ฆฌ

red์™€ black์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ (ํด๋ž˜์Šค์—์„œ) ์•„๋ž˜์˜ ์กฐ๊ฑด์„ ๋”ฐ๋ผ ๊ท ํ˜•์„ ๋งž์ถ”์–ด ๋‚˜๊ฐ€๋Š” ํŠธ๋ฆฌ์ด๋‹ค.

AVLํŠธ๋ฆฌ์— ๋น„ํ•ด์„œ๋Š” ์ง๊ด€์ ์ด์ง€ ์•Š๋‹ค.

 

โœ”๏ธŽ ์กฐ๊ฑด

  • root ๋…ธ๋“œ์™€ leaf ๋…ธ๋“œ์˜ ์ƒ‰์€ black (๋‹จ ์—ฌ๊ธฐ์„œ leaf๋…ธ๋“œ๋Š” ๊ธฐ์กด์˜ ๊ฐœ๋…๊ณผ ์•ฝ๊ฐ„ ๋‹ค๋ฅด๊ฒŒ ์ •์˜ํ•œ๋‹ค)
  • red ์ƒ‰ ๋…ธ๋“œ์˜ ์ž์‹์€ black(double red ๋ถˆ๊ฐ€)
  • ๋ชจ๋“  leaf ๋…ธ๋“œ์—์„œ root ๋…ธ๋“œ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ์˜ black๋…ธ๋“œ ์ˆ˜๋Š” ๊ฐ™์Œ

์กฐ๊ฑด์ด ๊นจ์ง€๋Š” ์ƒํ™ฉ์—์„œ Rebalancing! ์œผ๋กœ ๊ท ํ˜• ์œ ์ง€

 

๐Ÿ’ซ Red-Black ํŠธ๋ฆฌ์˜ ์‚ฝ์ž…

case1) ๋…ธ๋“œ ์‚ฝ์ž… ํ›„ double red ๋ฐœ์ƒ : ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ˜•์ œ ๋…ธ๋“œ๊ฐ€ red ์ผ๋•Œ

โœ”๏ธŽ Recoloring ์ง„ํ–‰ :

  • ์‚ฝ์ž…ํ•œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์™€ ๋ถ€๋ชจ์˜ ํ˜•์ œ ๋…ธ๋“œ๋ฅผ black ์œผ๋กœ ๋ณ€๊ฒฝ
  • ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ red๋กœ ๋ณ€๊ฒฝ
  • ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ root์ธ์ง€ double red์ธ์ง€์— ๋”ฐ๋ผ์„œ
    ๋ธ”๋ž™์œผ๋กœ ๋ƒ…๋‘˜์ง€, red๋กœ ๋ณ€ํ™˜ํ›„ ๋ฐ˜๋ณตํ•ด์„œ ์œ„์˜ ๋…ธ๋“œ์™€ ๋น„๊ตํ•ด recoloring ํ• ์ง€ ๊ฒฝ์ •

 

case2) ๋…ธ๋“œ ์‚ฝ์ž… ํ›„ double red ๋ฐœ์ƒ : ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ˜•์ œ ๋…ธ๋“œ๊ฐ€ black์ด๊ฑฐ๋‚˜ ์—†์„ ๋•Œ

โœ”๏ธŽ Restructuring ์ง„ํ–‰ : (ํšŒ์ „ ์—ฐ์‚ฐ)

  • ์กฐ์ • ๋Œ€์ƒ : ์‚ฝ์ž…ํ•œ ๋…ธ๋“œ, ๋ถ€๋ชจ ๋…ธ๋“œ, ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ
  • ์กฐ์ • ๋Œ€์ƒ ๋…ธ๋“œ๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
  • ๊ฐ€์šด๋ฐ ๋…ธ๋“œ๋ฅผ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ์„ ์ •ํ•˜๊ณ  black์œผ๋กœ ๋ณ€๊ฒฝ
  • ๋‚˜๋จธ์ง€ ๋‘ ๋…ธ๋“œ๋ฅผ ์ž์‹ ๋…ธ๋“œ๋กœ ๋‘๊ณ  red๋กœ ๋ณ€๊ฒฝ

 

๐Ÿ’ซ Red-Black ํŠธ๋ฆฌ์˜ ์‚ญ์ œ

โœ”๏ธŽ ์‚ญ์ œ ๋Œ€์ƒ ๋…ธ๋“œ๊ฐ€ black ์ด๊ณ  ๊ทธ ์ž๋ฆฌ์— ์˜ค๋Š” ๋…ธ๋“œ๊ฐ€ red์ธ ๊ฒฝ์šฐ

  • ํ•ด๋‹น ์ž๋ฆฌ๋กœ ์˜ค๋Š” red ๋…ธ๋“œ๋ฅผ black์œผ๋กœ ๋ณ€๊ฒฝ

โœ”๏ธŽ ์‚ญ์ œ ๋Œ€์ƒ ๋…ธ๋“œ๊ฐ€ black ์ด๊ณ  ๊ทธ ์ž๋ฆฌ์— ์˜ค๋Š” ๋…ธ๋“œ๊ฐ€ black์ธ ๊ฒฝ์šฐ (์ด์ค‘ ํ‘์ƒ‰ ์ผ€์ด์Šค 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•)

case1) "์ด์ค‘ ํ‘์ƒ‰ ๋…ธ๋“œ"์˜ ํ˜•์ œ ๋…ธ๋“œ๊ฐ€ black ์ด๊ณ , ํ˜•์ œ์˜ ์–‘์ชฝ ์ž์‹ ๋ชจ๋‘ black์ธ ๊ฒฝ์šฐ

  • ํ˜•์ œ ๋…ธ๋“œ๋ฅผ red๋กœ ๋ณ€๊ฒฝ
  • ์ด์ค‘ ํ‘์ƒ‰ ๋…ธ๋“œ์˜ ๊ฒ€์€์ƒ‰ 1๊ฐœ๋ฅผ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ์ „๋‹ฌ
  • ๋ถ€๋ชจ๊ฐ€ root๊ฐ€ ์•„๋‹Œ ์ด์ค‘ ํ‘์ƒ‰ ๋…ธ๋“œ๊ฐ€ ๋˜๋ฉด ํ•ด๋‹น case ๋ฐ˜๋ณต ์ง„ํ–‰

 

case2) "์ด์ค‘ ํ‘์ƒ‰ ๋…ธ๋“œ"์˜ ํ˜•์ œ ๋…ธ๋“œ๊ฐ€ red์ธ ๊ฒฝ์šฐ

  • ํ˜•์ œ ๋…ธ๋“œ๋ฅผ black์œผ๋กœ ๋ณ€๊ฒฝ
  • ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ red๋กœ ๋ณ€๊ฒฝ
  • ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „
  • ๊ทธ ๋‹ค์Œ ์ด์ค‘ ํ‘์ƒ‰ case์— ๋”ฐ๋ผ ๋ฐ˜๋ณต ์ง„ํ–‰

 

case3-1) "์ด์ค‘ ํ‘์ƒ‰ ๋…ธ๋“œ"์˜ ํ˜•์ œ ๋…ธ๋“œ๊ฐ€ black์ด๊ณ , *์˜ค๋ฅธ์ชฝ ์ž์‹์ด red์ธ ๊ฒฝ์šฐ

  • ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ํ˜•์ œ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฒ€์€์ƒ‰์œผ๋กœ ๋ณ€๊ฒฝ
  • ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ 

case3-2) "์ด์ค‘ ํ‘์ƒ‰ ๋…ธ๋“œ"์˜ ํ˜•์ œ ๋…ธ๋“œ๊ฐ€ black์ด๊ณ , *์™ผ์ชฝ ์ž์‹์ด red์ธ ๊ฒฝ์šฐ

  • ํ˜•์ œ ๋…ธ๋“œ๋ฅผ red๋กœ ๋ณ€๊ฒฝ
  • ํ˜•์ œ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ฅผ black์œผ๋กœ ๋ณ€๊ฒฝ
  • ํ˜•์ œ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „
  • ์ด์ค‘ ํ‘์ƒ‰ 3-1 case ์ง„ํ–‰

 

โœ๏ธ "Red-Black ํŠธ๋ฆฌ" VS "AVL ํŠธ๋ฆฌ"

โœจ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ 

๋‘˜ ๋‹ค O(logN)

 

โœจ ๊ท ํ˜• ์ˆ˜์ค€

AVLํŠธ๋ฆฌ๊ฐ€ Red-Black ํŠธ๋ฆฌ ๋ณด๋‹ค ์ข€ ๋” ์—„๊ฒฉํ•˜๊ฒŒ ๊ท ํ˜•์„ ์žก์Œ

Red-Black ํŠธ๋ฆฌ๋Š” ์ƒ‰์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒฝ์šฐ๋กœ ์ธํ•ด ํšŒ์ „ ์ˆ˜๊ฐ€ ๊ฐ์†Œ

 

์‹ค ์‚ฌ์šฉ์‹œ,

Tree ์ฒด๊ณ„๊ฐ€ ์žกํžŒ ํ›„, ํƒ์ƒ‰์ด ๋งŽ์€ ๊ฒฝ์šฐ์—๋Š” AVLํŠธ๋ฆฌ๊ฐ€ ์œ ๋ฆฌ

์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ์—๋Š” Red-BlackํŠธ๋ฆฌ๊ฐ€ ์œ ๋ฆฌ