🍎C_Red-Black-Tree_CheatSheet_v1

A Yeon JangΒ·2025λ…„ 8μ›” 14일
post-thumbnail

πŸ“Œ Red-Black-Tree

각 λ…Έλ“œκ°€ λ ˆλ“œ, λΈ”λž™μ˜ 색상 속성을 κ°€μ§€κ³  μžˆλŠ” 이진 νŠΈλ¦¬μ΄λ‹€.

슀슀둜 κ· ν˜•μ„ μž‘λŠ” 트리이기 λ•Œλ¬Έμ— BST의 λΆˆκ· ν˜• μ΄μ§„νŠΈλ¦¬ 단점을 κ°œμ„ ν•  수 있고,
μ΄λŸ¬ν•œ νŠΉμ„± λ•Œλ¬Έμ— μžκ°€ κ· ν˜• 이진 탐색 νŠΈλ¦¬λΌκ³ λ„ ν•œλ‹€.

➑️ O(n) -> O(log n)
λ ˆλ“œ-λΈ”λž™ νŠΈλ¦¬λŠ” μ΅œμ•…μ˜ κ²½μš°μ—λ„ μ‚½μž…/μ‚­μ œ/탐색 = O(log n)을 보μž₯ν•œλ‹€.

  • μ΄λ•Œ μ΄μ§„νƒμƒ‰νŠΈλ¦¬μ²˜λŸΌ μ™Όμͺ½ μ„œλΈŒνŠΈλ¦¬λŠ” λΆ€λͺ¨λ…Έλ“œ 보닀 μž‘μ€ 값듀을
  • 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬λŠ” λΆ€λͺ¨λ…Έλ“œλ³΄λ‹€ 큰 값듀을 보μž₯ν•˜μ§€λ§Œ
  • λ¦¬ν”„λ…Έλ“œλ“€μ€ 자료λ₯Ό κ°€μ§€κ³  μžˆμ§€ μ•Šμ€ 즉, λΉ„μ–΄μžˆλŠ” μƒνƒœμ΄λ‹€.

πŸ”² Red-Black-Tree 쑰건

  1. λͺ¨λ“  λ…Έλ“œλŠ” λ ˆλ“œ ν˜Ήμ€ λΈ”λž™ μ€‘μ˜ ν•˜λ‚˜μ˜ νŠΉμ„±μ„ κ°€μ§„λ‹€.
  2. 루트 λ…Έλ“œλŠ” 항상 λΈ”λž™μ΄λ‹€.
  3. λͺ¨λ“  리프 λ…Έλ“œλ“€(NULL LEAF)은 λΈ”λž™μ΄λ‹€.
  4. λ ˆλ“œ λ…Έλ“œμ˜ λͺ¨λ“  μžμ‹ λ…Έλ“œλ“€μ€ μ–Έμ œλ‚˜ λΈ”λž™μ΄κΈ° λ•Œλ¬Έμ— λ ˆλ“œ λ…Έλ“œλŠ” 연속할 수 μ—†λ‹€.
  5. μ–΄λ–€ λ…Έλ“œλ‘œλΆ€ν„° μ‹œμž‘ν•΄μ„œ 그에 μ†ν•œ ν•˜μœ„ 리프 λ…Έλ“œμ— λ„λ‹¬ν•˜λŠ” λͺ¨λ“  κ²½λ‘œμ—λŠ” 리프 λ…Έλ“œλ₯Ό μ œμ™Έν•˜λ©΄ λͺ¨λ‘ 같은 개수의 λΈ”λž™ λ…Έλ“œκ°€ μžˆλ‹€.

πŸ’­ 쑰건 μ‚΄νŽ΄λ³΄κΈ°

3️⃣ λͺ¨λ“  리프 λ…Έλ“œλ“€(NULL LEAF)은 λΈ”λž™μ΄λ‹€.

πŸƒ nil node

아무 데이터도 κ°–κ³  μžˆμ§€ μ•ŠμŒμ„ λ‚˜νƒ€λ‚΄λŠ” νŠΉμˆ˜ν•œ "검정색"λ…Έλ“œμ΄κ³ 
이 λ…Έλ“œλŠ” μžμ‹λ…Έλ“œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 경우λ₯Ό ν‘œμ‹œν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

즉, RBTμ—μ„œ λͺ¨λ“  끝 λ…Έλ“œ(μžμ‹ λ…Έλ“œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”)듀은 Nil node이며
이둜 μΈν•΄μ„œ RBT 3번 쑰건이 μ„±λ¦½ν•œλ‹€.


4️⃣ λ ˆλ“œ λ…Έλ“œμ˜ λͺ¨λ“  μžμ‹ λ…Έλ“œλ“€μ€ μ–Έμ œλ‚˜ λΈ”λž™μ΄κΈ° λ•Œλ¬Έμ— λ ˆλ“œ λ…Έλ“œλŠ” 연속할 수 μ—†λ‹€.


5️⃣ μž„μ˜μ˜ λ…Έλ“œμ—μ„œ μžμ†μΈ nil λ…Έλ“œλ“€μ— λ„λ‹¬ν•˜λŠ” λͺ¨λ“  κ²½λ‘œμ—λŠ” λͺ¨λ‘ 같은 개수의 λΈ”λž™ λ…Έλ“œκ°€ μžˆλ‹€(μžκΈ°μžμ‹ μ€ μΉ΄μš΄νŠΈμ—μ„œ μ œμ™Έ).

βœ”οΈ Case 1 (μ™Όμͺ½ 트리 κ·Έλ¦Ό)

μž„μ˜μ˜ μ„ νƒλœ λ…Έλ“œ : 70
ν•΄λ‹Ή λ…Έλ“œμ—μ„œ μ‹œμž‘ν•΄μ„œ 도달할 수 μžˆλŠ” λͺ¨λ“  nil λ…Έλ“œμ— λŒ€ν•΄μ„œ λΈ”λž™λ…Έλ“œλ₯Ό 2κ°œμ”© κ°€μ§€κ³  μžˆλ‹€.

βœ”οΈ Case 2 (였λ₯Έμͺ½ 트리 κ·Έλ¦Ό)

μž„μ˜μ˜ μ„ νƒλœ λ…Έλ“œ : 40
ν•΄λ‹Ή λ…Έλ“œμ—μ„œ μ‹œμž‘ν•΄μ„œ 도달할 수 μžˆλŠ” λͺ¨λ“  nil λ…Έλ“œμ— λŒ€ν•΄μ„œ λΈ”λž™ λ…Έλ“œλ₯Ό 1κ°œμ”© κ°€μ§€κ³  μžˆλ‹€.

πŸ’‘ point

5번 κ·œμΉ™μ—μ„œ 자기 μžμ‹ μ€ μΉ΄μš΄νŠΈμ—μ„œ μ œμ™Έν•˜κΈ° λ•Œλ¬Έμ—
Case 1, Case 2 처럼 μž„μ˜μ˜ μ‹œμž‘ λ…Έλ“œκ°€ λΈ”λž™ λ…Έλ“œ, λ ˆλ“œ λ…Έλ“œμΈ 것은 이 κ·œμΉ™μ—μ„œ 영ν–₯을 λΌμΉ˜μ§€ λͺ»ν•œλ‹€.

⚫️ Black-height

μœ„μ—μ„œ κ³„μ‚°ν–ˆλ˜ 것 처럼 μž„μ˜μ˜ μ‹œμž‘ λ…Έλ“œμ—μ„œ 도달할 수 μžˆλŠ”
nil λ…Έλ“œκΉŒμ§€μ˜ κ²½λ‘œμ—μ„œ ν¬ν•¨λ˜λŠ” black_node 의 개수
λ₯Ό μ˜λ―Έν•œλ‹€.
"bh(x) = λ…Έλ“œ xλ₯Ό μ œμ™Έν•˜κ³  x의 μ–΄λ–€ μžμ† NILκΉŒμ§€ κ°€λŠ” κ²½λ‘œμ— μ‘΄μž¬ν•˜λŠ” λΈ”λž™ λ…Έλ“œμ˜ 개수(=λͺ¨λ“  경둜 동일). NIL은 λΈ”λž™μœΌλ‘œ κ³„μ‚°ν•œλ‹€.”

➑️ 이 κ°œλ…μ΄ μ„±λ¦½ν•˜λ €λ©΄ 5번 κ·œμΉ™μ΄ μ„ ν–‰λ˜μ–΄μ•Ό ν•œλ‹€.

  • 5번 κ·œμΉ™μ΄ μ„ ν–‰λ˜μ§€ μ•ŠμœΌλ©΄ μž„μ˜μ˜ μ‹œμž‘ λ…Έλ“œμ— λŒ€ν•΄ nil λ…Έλ“œλ³„λ‘œ
    Black-heightκ°€ μΌμ •ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ˜λ―Έκ°€ μ—†λ‹€.

⁉️ Red-Black-Tree νŠΉμ„±

⭐️ μ€‘μš”ν•œ νŠΉμ„±

루트 λ…Έλ“œλΆ€ν„° κ°€μž₯ λ¨Ό μžŽλ…Έλ“œ κ²½λ‘œκΉŒμ§€μ˜ 거리 < κ°€μž₯ κ°€κΉŒμš΄ μžŽλ…Έλ“œ κ²½λ‘œκΉŒμ§€μ˜ 거리 * 2

β˜‘οΈ μ΅œλ‹¨, 졜μž₯ 경둜

  1. λ ˆλ“œ-λΈ”λž™ νŠΈλ¦¬μ—μ„œ "μ΅œλ‹¨ 경둜"와 "졜μž₯ 경둜"의 의미

βœ”οΈ μ΅œλ‹¨ 경둜
루트 λ…Έλ“œλΆ€ν„° μ–΄λ–€ 리프(NIL) λ…Έλ“œκΉŒμ§€ κ°€λŠ” κ°€μž₯ 짧은 경둜λ₯Ό λ§ν•œλ‹€.
λ ˆλ“œ λ…Έλ“œλ₯Ό μΆ”κ°€ν•˜λ©΄ κ²½λ‘œκ°€ κΈΈμ–΄μ§€κΈ° λ•Œλ¬Έμ— "λͺ¨λ“  λ…Έλ“œκ°€ λΈ”λž™"인 κ²½μš°κ°€ μ΅œλ‹¨μž…λ‹ˆλ‹€.
(이 κ²½μš°κ°€ κ°€λŠ₯ν•œ μ΅œλ‹¨ κ±°λ¦¬λΌλŠ” 것이지 μ‹€μ œ 트리의 μ΅œλ‹¨ κ²½λ‘œμ— λ ˆλ“œκ°€ ν¬ν•¨λ˜λ©΄ μ•ˆλœλ‹€λŠ” 말은 μ•„λ‹ˆλ‹€.)

βœ”οΈ 졜μž₯ 경둜
루트 λ…Έλ“œλΆ€ν„° 리프(NIL)κΉŒμ§€ κ°€λŠ” κ°€μž₯ κΈ΄ 경둜λ₯Ό λ§ν•œλ‹€.
λ„€ 번째 속성(λ ˆλ“œ λ…Έλ“œκ°€ 연속 λΆˆκ°€) λ•Œλ¬Έμ—,
졜μž₯ κ²½λ‘œλŠ” λΈ”λž™κ³Ό λ ˆλ“œκ°€ λ²ˆκ°ˆμ•„ λ‚˜μ˜€λŠ” κ²½λ‘œκ°€ λ©λ‹ˆλ‹€.

β˜‘οΈ 거리의 ν•œκ³„

  1. μ™œ 두 배보닀 κΈΈ 수 μ—†λŠ”μ§€
  • λ‹€μ„― 번째 μ†μ„±μœΌλ‘œ μΈν•΄μ„œ λͺ¨λ“  경둜의 λΈ”λž™ λ…Έλ“œ κ°œμˆ˜λŠ” λ™μΌν•˜λ‹€λŠ” 것을 μ•Œμ•˜λ‹€.
    즉, μ΅œλ‹¨ κ²½λ‘œλŠ” λΈ”λž™ λ…Έλ“œλ§Œ β†’ λΈ”λž™ 개수 = bh (black height) 라고 ν•˜μž

  • 졜μž₯ κ²½λ‘œλŠ” λ„€ 번째 속성에 μ˜ν•΄ 각 λΈ”λž™ λ…Έλ“œ 사이에 λ ˆλ“œ λ…Έλ“œλ₯Ό ν•˜λ‚˜μ”© 끼운 경우인데
    κ·Έλ ‡λ‹€λ©΄ λ ˆλ“œ λ…Έλ“œλŠ” -> λ ˆλ“œ 개수 = (μ΅œλŒ€ bh개 - 1)κ°€ 될 수 밖에 μ—†λ‹€.
    ➑️ R ≀ B

0개의 λŒ“κΈ€