9taetae9 2024. 6. 12. 09:32
728x90

B+-트리의 μž₯점 및 단점

μž₯점:

  • μžλ™ μž¬μ‘°μ§ν™”: B+-νŠΈλ¦¬λŠ” μ‚½μž… 및 μ‚­μ œ μž‘μ—…μ΄ λ°œμƒν•  λ•Œλ§ˆλ‹€ μž‘μ€ 지역적 λ³€κ²½μœΌλ‘œ μžλ™μœΌλ‘œ μž¬μ‘°μ§ν™”λœλ‹€. μ΄λŠ” λ°μ΄ν„°λ² μ΄μŠ€κ°€ κ³„μ†ν•΄μ„œ 효율적으둜 μž‘λ™ν•˜λ„λ‘ 도와쀀닀.

단점:

  • μ˜€λ²„ν—€λ“œ: μ‚½μž… 및 μ‚­μ œ μ‹œ 좔가적인 μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•˜λ©°, 트리 ꡬ쑰λ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•΄ 곡간적인 μ˜€λ²„ν—€λ“œλ„ μ‘΄μž¬ν•œλ‹€.

B+-트리의 ꡬ쑰 및 νŠΉμ„±

  • κ· ν˜• 트리: λ£¨νŠΈμ—μ„œ 리프 λ…Έλ“œκΉŒμ§€μ˜ λͺ¨λ“  경둜의 길이가 동일
  • μžμ‹ 수 μ œν•œ: λ£¨νŠΈλ‚˜ 리프가 μ•„λ‹Œ 각 λ…Έλ“œλŠ” μ΅œμ†Œ ⌈n/2⌉μ—μ„œ μ΅œλŒ€ n개의 μžμ‹μ„ 가짐
  • 리프 λ…Έλ“œμ˜ κ°’ 수 μ œν•œ: 리프 λ…Έλ“œλŠ” μ΅œμ†Œ ⌈(n–1)/2⌉μ—μ„œ μ΅œλŒ€ (n–1)개의 값을 가짐
  • 루트의 특수 경우: λ£¨νŠΈκ°€ 리프가 μ•„λ‹Œ 경우 μ΅œμ†Œ 2개의 μžμ‹μ„ κ°€μ Έμ•Όν•˜κ³  λ£¨νŠΈκ°€ 리프인 경우 μ΅œμ†Œ 0κ°œμ—μ„œ μ΅œλŒ€ (n–1)개의 κ°’ 가짐

B+-트리 λ…Έλ“œμ˜ ꡬ쑰

  • 일반적인 λ…Έλ“œ: [P1, K1, P2, K2, ..., Pn-1, Kn-1, Pn]의 ν˜•νƒœλ‘œ ꡬ성
    • K1, K2, ..., Kn-1: 탐색 ν‚€ κ°’λ“€
    • P1, P2, ..., Pn: μžμ‹ λ…Έλ“œλ‘œμ˜ 포인터 (비리프 λ…Έλ“œμ˜ 경우) λ˜λŠ” λ ˆμ½”λ“œλ‚˜ λ ˆμ½”λ“œ λ²„ν‚·μœΌλ‘œμ˜ 포인터 (리프 λ…Έλ“œμ˜ 경우)
  • λ…Έλ“œ λ‚΄ ν‚€ κ°’μ˜ μˆœμ„œ: 각 λ…Έλ“œ λ‚΄μ˜ 탐색 ν‚€ 값듀은 K1 < K2 < ... < Kn–1의 μˆœμ„œλ‘œ μ •λ ¬λ˜μ–΄ 있음
    • μ€‘λ³΅λœ ν‚€ 값이 μ—†λ‹€κ³  κ°€μ •

B+-트리의 리프 λ…Έλ“œ

  • 리프 λ…Έλ“œμ˜ νŠΉμ„±:
    • PiλŠ” 탐색 ν‚€ κ°’ Kiλ₯Ό κ°€μ§„ λ ˆμ½”λ“œλ‘œμ˜ 포인터이닀.
    • Li와 Ljκ°€ 리프 λ…Έλ“œμ΄κ³  i < j라면, Li의 탐색 ν‚€ 값듀은 Lj의 탐색 ν‚€ 값듀보닀 μž‘κ±°λ‚˜ κ°™λ‹€.
    • Pn은 λ‹€μŒ 리프 λ…Έλ“œ(ν˜•μ œ λ…Έλ“œ)둜의 포인터이닀.

B+-트리의 비리프 λ…Έλ“œ

  • 비리프 λ…Έλ“œλ“€μ€ 리프 λ…Έλ“œμ— λŒ€ν•œ 닀단계 ν¬μ†Œ 인덱슀λ₯Ό ν˜•μ„±ν•œλ‹€.
    • 비리프 λ…Έλ“œμ˜ ν˜•νƒœ: [P1, K1, P2, K2, ..., Pn-1, Kn-1, Pn]
    • P1이 κ°€λ¦¬ν‚€λŠ” μ„œλΈŒνŠΈλ¦¬μ˜ λͺ¨λ“  탐색 ν‚€ 값은 K1보닀 μž‘λ‹€.
    • 2 ≤ i ≤ n – 1인 경우, Piκ°€ κ°€λ¦¬ν‚€λŠ” μ„œλΈŒνŠΈλ¦¬μ˜ λͺ¨λ“  탐색 ν‚€ 값은 Ki–1보닀 ν¬κ±°λ‚˜ κ°™κ³  Ki보닀 μž‘λ‹€.
    • Pn이 κ°€λ¦¬ν‚€λŠ” μ„œλΈŒνŠΈλ¦¬μ˜ λͺ¨λ“  탐색 ν‚€ 값은 Kn–1보닀 ν¬κ±°λ‚˜ κ°™λ‹€.

B+-트리의 예 (n=6)

  • 리프 λ…Έλ“œλŠ” μ΅œμ†Œ 3κ°œμ—μ„œ μ΅œλŒ€ 5개의 값을 κ°€μ§„λ‹€. (⌈(n–1)/2⌉ ~ (n–1))
  • 비리프 λ…Έλ“œ(루트 μ œμ™Έ)λŠ” μ΅œμ†Œ 3κ°œμ—μ„œ μ΅œλŒ€ 6개의 μžμ‹μ„ κ°€μ§„λ‹€. (⌈n/2⌉ ~ n)
  • λ£¨νŠΈλŠ” μ΅œμ†Œ 2개의 μžμ‹μ„ κ°€μ§„λ‹€.

B+-트리의 μ‚½μž… 및 μ‚­μ œ νš¨μœ¨μ„±

  • ν¬μ†Œ 인덱슀: 비리프 λ…Έλ“œλŠ” ν¬μ†Œ 인덱슀λ₯Ό ν˜•μ„±ν•˜κ³ , 리프 λ…Έλ“œλŠ” λ°€μ§‘ 인덱슀λ₯Ό ν˜•μ„±ν•œλ‹€.
  • μ‚½μž… 및 μ‚­μ œ νš¨μœ¨μ„±: μ‚½μž… 및 μ‚­μ œ μž‘μ—…μ€ 인덱슀λ₯Ό μž¬κ΅¬μ„±ν•¨μœΌλ‘œμ¨ 효율적으둜 μ²˜λ¦¬λœλ‹€. 트리 ꡬ쑰의 쑰정은 둜그 μ‹œκ°„ 내에 μˆ˜ν–‰λœλ‹€.

B+-트리의 높이

  • B+-νŠΈλ¦¬λŠ” μƒλŒ€μ μœΌλ‘œ 적은 수의 λ ˆλ²¨μ„ κ°€μ§„λ‹€.
    • 루트 μ•„λž˜ λ ˆλ²¨μ—λŠ” μ΅œμ†Œ 2*⌈(n-1)/2⌉ 개의 값이 μžˆλ‹€. => λ£¨νŠΈλŠ” μ΅œμ†Œ 2개의 μžμ‹μ„ κ°€μ§€κ³  리프 λ…Έλ“œλŠ” μ΅œμ†Œ ⌈(n–1)/2⌉값을 κ°€μ§€κΈ° λ•Œλ¬Έ.
    • κ·Έ λ‹€μŒ λ ˆλ²¨μ—λŠ” μ΅œμ†Œ 2*⌈n/2⌉ * ⌈(n-1)/2⌉ 개의 값이 μžˆλ‹€. => 비리프 λ…Έλ“œ(루트 μ œμ™Έ)λŠ” μ΅œμ†Œ ⌈n/2⌉개의 μžμ‹μ„ κ°€μ§€κΈ° λ•Œλ¬Έ
  • νŒŒμΌμ— K개의 탐색 ν‚€ 값이 μžˆλŠ” 경우, 트리의 λ†’μ΄λŠ” μ΅œλŒ€ ⌈log⌈n/2⌉(K)⌉이닀.
  • λ…Έλ“œλŠ” 일반적으둜 λ””μŠ€ν¬ 블둝과 λ™μΌν•œ 크기(4K λ˜λŠ” 8K)이닀.
    • n은 일반적으둜 μ•½ 100이닀 (인덱슀 ν•­λͺ© λ‹Ή 40λ°”μ΄νŠΈ)
    • 100만 개의 탐색 ν‚€ κ°’κ³Ό n=100일 경우, μ΅œλŒ€ ⌈log50(1,000,000)⌉=4개의 λ…Έλ“œλ₯Ό μ‘°νšŒν•œλ‹€.
    • 반면, κ· ν˜• 이진 νŠΈλ¦¬μ—μ„œλŠ” 100만 개의 탐색 ν‚€ 값에 λŒ€ν•΄ μ•½ 20개의 λ…Έλ“œλ₯Ό μ‘°νšŒν•΄μ•Ό ν•œλ‹€.

B+-νŠΈλ¦¬μ—μ„œμ˜ 질의

  • νŠΉμ • 탐색 ν‚€ κ°’ Vλ₯Ό κ°€μ§„ λ ˆμ½”λ“œλ₯Ό μ°ΎλŠ” 방법:
    1. Cλ₯Ό 루트둜 μ„€μ •
    2. Cκ°€ 리프 λ…Έλ“œκ°€ 될 λ•ŒκΉŒμ§€ 반볡 : 
      • iλ₯Ό V ≤ Kiλ₯Ό λ§Œμ‘±ν•˜λŠ” μ΅œμ†Œ κ°’μœΌλ‘œ μ„€μ •
      • λ§Œμ•½ 그런 iκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄, Cλ₯Ό C의 λ§ˆμ§€λ§‰ non-null pointer둜 μ„€μ •
      • V=Ki이면, Cλ₯Ό Pi+1둜 μ„€μ •
      • κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄, Cλ₯Ό Pi둜 μ„€μ •
    3. 이제 CλŠ” 리프 λ…Έλ“œμ΄λ‹€. iλ₯Ό Ki = Vλ₯Ό λ§Œμ‘±ν•˜λŠ” μ΅œμ†Œ κ°’μœΌλ‘œ μ„€μ •
    4. λ§Œμ•½ 그런 κ°’ iκ°€ μ‘΄μž¬ν•˜λ©΄, Pi 포인터λ₯Ό 따라가 λ ˆμ½”λ“œλ₯Ό μ–»λŠ”λ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄, ν•΄λ‹Ή 탐색 ν‚€ 값을 κ°€μ§„ λ ˆμ½”λ“œλŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
728x90