πŸ”΄βš«οΈ Red-Black Tree의 μ‚­μ œ μ—°μ‚°

μ„€ν˜„μ•„Β·2025λ…„ 4μ›” 18일

πŸ‘‰ RB Tree의 속성

  1. λͺ¨λ“  λ…Έλ“œλŠ” red ν˜Ήμ€ black 의 μƒ‰μœΌλ‘œ κ΅¬μ„±λœλ‹€.(1 bit)
  2. root λ…Έλ“œλŠ” black이닀.
  3. λͺ¨λ“  NIL(leaf λ…Έλ“œ)λŠ” black이닀.
  4. red λ…Έλ“œλŠ” 연달아 λ‚˜νƒ€λ‚  수 μ—†λ‹€.(red λ…Έλ“œμ˜ μžμ‹ μ–‘μͺ½μ€ μ–Έμ œλ‚˜ black)
  5. μž„μ˜μ˜ λ…Έλ“œλ‘œλΆ€ν„° NIL λ…Έλ“œμ— λ„λ‹¬ν•˜λŠ” λͺ¨λ“  경둜의 black μˆ˜λŠ” κ°™λ‹€.(본인 μ œμ™Έ)

πŸ‘‰ μ΄μ—μ„œ νŒŒμƒλ˜λŠ” κ·œμΉ™

  • 5번 속성을 λ§Œμ‘±ν•˜κ³  μžˆλ‹€λ©΄ 두 μžλ…€κ°€ 같은 색을 κ°€μ§ˆ λ•Œ, λΆ€λͺ¨μ™€ 두 μžλ…€μ˜ 색을 바꿔도 μ—¬μ „νžˆ 속성을 λ§Œμ‘±ν•œλ‹€.
  • μ‚½μž…/μ‚­μ œ μ‹œ 주둜 4번, 5번 속성에 μœ„λ°°λ˜λ©° 이λ₯Ό ν•΄κ²°ν•˜λ©΄ κ· ν˜•μ΄ μœ μ§€λœλ‹€.
  • μ‚­μ œλ˜λŠ” λ…Έλ“œμ˜ 색이 black이면 보톡 5번 κ·œμΉ™μ΄ μœ„λ°°λœλ‹€.

μ‚½μž… 연산에 이어, μ‚­μ œ μ—°μ‚°μ—μ„œλ„ 속성과 κ·œμΉ™μ΄ μ•„μ£Ό μ€‘μš”ν•˜λ‹€!

μœ„μ˜ 속성과 κ·œμΉ™μ—μ„œ μš°λ¦¬λŠ” μ‚­μ œ 연산을 ν•  λ–„ μ–΄λ–€ 뢀뢄을 신경써주어야 ν•˜λŠ” μ§€ μ•Œ 수 μžˆλ‹€.
1. μ‚­μ œλ˜λŠ” λ…Έλ“œμ˜ 색이 black이면 μž¬μ‘°μ •μ΄ ν•„μš”ν•˜λ‹€. 2. μ‚­μ œλ₯Ό ν•˜κ³  속성을 μœ„λ°°ν•˜μ§€ μ•Šμ•˜λŠ”μ§€ 확인해야 ν•œλ‹€.

μ‚­μ œλ„ 잘 κΈ°μ–΅ν•˜λ©΄μ„œ μ‹œμž‘ν•΄λ³΄μž!(μ‚½μž…λ³΄λ‹€ 더 λ§Žμ€ μΌ€μ΄μŠ€λ₯Ό κ³ λ €ν•΄μ•Όν•˜λ‹ˆ, μ •μ‹  λΉ λ”±! λΆ™λ“€μž!)

Red-Black Tree μ‚­μ œ

μ‚­μ œν•˜λŠ” λ…Έλ“œλ₯Ό z라고 ν•˜μž.

RB Treeμ—μ„œ μ‚­μ œ 연산을 ν•  λ•ŒλŠ” 두 κ°€μ§€ μš”μ†Œλ₯Ό 잘 확인해야 ν•œλ‹€.
1. z λ…Έλ“œλ₯Ό λŒ€μ²΄ν•˜λŠ” λ…Έλ“œκ°€ μ–΄λ””μ—μ„œ μ˜€λŠ”μ§€?
2. λŒ€μ²΄ν•˜λŠ” λ…Έλ“œ(μ‹€μ œλ‘œ μ‚­μ œλ˜λŠ” λ…Έλ“œ)의 색이 λ­”μ§€?

이게 μ€‘μš”ν•œ μ΄μœ λŠ” zλ₯Ό λŒ€μ²΄ν•˜λŠ” λ…Έλ“œλŠ” 맀번 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ΄λ‹€.

  • zκ°€ ν•˜λ‚˜ μ΄ν•˜μ˜ μžμ‹μ„ κ°€μ§€κ³  μžˆμ„ λ•ŒλŠ” zλ₯Ό μ‚­μ œν•œλ‹€.
  • ν•˜μ§€λ§Œ zκ°€ λ‘κ°œμ˜ μžμ‹μ„ κ°€μ§€κ³  μžˆμ„ λ•ŒλŠ” z의 successorκ°€ zλ₯Ό λŒ€μ²΄ν•œλ‹€. 이 경우, z의 successor의 색이 μ‚­μ œλœλ‹€.

이게 무슨 말인지 감이 μ•ˆ μž‘νžν…Œλ‹ˆ, 그림으둜 ν™•μΈν•΄λ³΄μž. (fixup은 κ³ λ €ν•˜κΈ° μ „μœΌλ‘œ, μ‹€μ œ μ‚­μ œν•˜λŠ” λ…Έλ“œλ₯Ό λŒ€μ²΄ν•˜λŠ” λ…Έλ“œμ— μ§‘μ€‘ν•΄λ³΄μž!)

successorλž€? 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬μ—μ„œ κ°€μž₯ μž‘μ€ κ°’


자, 이제 μ‹œμž‘ν•΄λ³΄μž.
μš°μ„  크게 두 κ°€μ§€ 경우둜 λ‚˜λ‰œλ‹€. μ‚­μ œν•  λ…Έλ“œμ˜ 색이 red / black인 κ²½μš°λ‹€.

μ‚­μ œν•  λ…Έλ“œμ˜ 색이 red인 경우

이 κ²½μš°λŠ” λ‹Ήμ—°ν•˜κ³  κ°μ‚¬ν•˜κ²Œλ„
RB Tree μ†μ„±μ˜ 변동이 μ—†λ‹€. λ”°λΌμ„œ κ·Έλƒ₯ μ‚­μ œν•΄μ£Όλ©΄ λœλ‹€.
(RB TreeλŠ” μž„μ˜μ˜ λ…Έλ“œμ—μ„œ nil λ…Έλ“œκΉŒμ§€μ˜ black λ…Έλ“œ μˆ˜κ°€ κ°™μ•„μ•Ό ν•œλ‹€. 이런 μ†μ„±μœΌλ‘œ redκ°€ μ‚­μ œλ  λ•ŒλŠ” RB Tree 속성에 영ν–₯을 λΌμΉ˜μ§€ μ•ŠλŠ”λ‹€.)

μ‚­μ œν•  λ…Έλ“œμ˜ 색이 black인 경우

β–ΆοΈŽ μ‚­μ œν•  λ…Έλ“œμ˜ 색이 black일 경우 Delete-fixup을 톡해 κ· ν˜•μ„ μœ μ§€ν•œλ‹€.

μš°μ„  RB Treeμ—μ„œ black이 μ‚­μ œλ  λ•ŒλŠ” 속성 5λ²ˆμ„ μœ„λ°°ν•˜κ²Œ λ˜λ―€λ‘œ,
λŒ€μ²΄λœ λ…Έλ“œμ— extra black을 λΆ€μ—¬ν•˜κ³  이λ₯Ό μ μ ˆν•˜κ²Œ ν•΄κ²°ν•˜λ©΄μ„œ κ· ν˜•μ„ μœ μ§€ν•  수 μžˆλ‹€.
β€» extra black은 μ‚­μ œλœ λ…Έλ“œμ˜ μžμ‹(μžμ‹μ΄ 없을 경우 NIL)에 λΆ€μ—¬ν•˜κ±°λ‚˜, λŒ€μ²΄λœ λ…Έλ“œμ— λΆ€μ—¬ν•˜κ²Œ λœλ‹€.

extra black을 λΆ€μ—¬λ°›μœΌλ©΄ μ•„λž˜ 두 κ°€μ§€λ‘œ κ·€κ²°λœλ‹€.(μš°λ¦¬λŠ” λ…Έλ“œμ˜ 색을 두 개둜 ν•œμ •ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€!)


이 두 κ°€μ§€λ₯Ό 잘 닀루어 ν•΄κ²°ν•΄μ£Όλ©΄ λœλ‹€.
이 과정을 Delete-fixup 이라고 ν•˜κ³ , μ•„λž˜μ—μ„œ λͺ¨λ“  caseλ₯Ό λ‹€λ€„λ³΄μž.

CASE 1: ν˜•μ œ λ…Έλ“œκ°€ red일 λ•Œ

CASE 2: ν˜•μ œ λ…Έλ“œκ°€ black + ν˜•μ œ λ…Έλ“œμ˜ μžμ‹ λͺ¨λ‘ black일 λ•Œ

CASE 3: ν˜•μ œ λ…Έλ“œκ°€ black + ν˜•μ œ λ…Έλ“œμ˜ left(or right)κ°€ red, 꺾인 ν˜•νƒœμΌ λ•Œ


이 κ²½μš°μ—λŠ” case 4와 μƒν˜Έ 배타적이지 μ•ŠκΈ° λ•Œλ¬Έμ— κ³§λ°”λ‘œ case 4둜 ν•΄κ²°ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

CASE 4: ν˜•μ œ λ…Έλ“œκ°€ black + ν˜•μ œ λ…Έλ“œμ˜ right(or left)κ°€ red, 일자 ν˜•νƒœμΌ λ•Œ

예제

https://www.youtube.com/watch?v=6drLl777k-E&t=1624s
μœ„ μ˜μƒμ„ μ°Έκ³ ν–ˆλ‹€.


μ•„λž˜ μˆœμ„œλ‘œ μ‚­μ œν•΄λ³΄μž.





profile
μ–΄μ„œμ˜€μ„Έμš”! ☺️ ν›„νšŒ μ—†λŠ” 내일을 μœ„ν•΄ μ˜€λŠ˜μ„ μ—΄μ‹¬νžˆ μ‚΄μ•„κ°€λŠ” κ°œλ°œμžμž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€