TIL 010 B+ํŠธ๋ฆฌ

์กฐ์„ฑํ˜„ยท2021๋…„ 1์›” 13์ผ
0

์ •๊ธ€

๋ชฉ๋ก ๋ณด๊ธฐ
11/21

https://www.programiz.com/dsa/b-plus-tree

B+ํŠธ๋ฆฌ๋ฅผ c๋กœ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋‹ค.
github

๐Ÿ“• B+ํŠธ๋ฆฌ

B+ํŠธ๋ฆฌ๋Š” BํŠธ๋ฆฌ์˜ ๊ฐœ์„  ๊ตฌ์กฐ๋กœ leaf์— ๋ชจ๋“  ๊ฐ’๋“ค์„ ๋‹ด๊ณ  ์žˆ๋‹ค. ์ด๋Š” ๋ฉ€ํ‹ฐ๋ ˆ๋ฒจ ์ธ๋ฑ์‹ฑ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ ๋” ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ๋˜๊ธฐ ์ ์ ˆํ•˜๋‹ค.

๐Ÿ‘‰ B+ํŠธ๋ฆฌ ํŠน์ง•

  • ๋ชจ๋“  leaf ๋…ธ๋“œ๋Š” ๊ฐ™์€ ๋ ˆ๋ฒจ์— ์žˆ๋‹ค.
  • root๋Š” ์ตœ์†Œ ๋‘ ๊ฐœ์˜ ์ž๋…€๋ฅผ ๊ฐ–๋Š”๋‹ค.
  • root๋ฅผ ๋บ€ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ตœ๋Œ€ n๊ฐœ, ์ตœ์†Œ n/2 ๊ฐœ์˜ ์ž๋…€๋ฅผ ๊ฐ–๋Š”๋‹ค.
  • ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ตœ๋Œ€ n-1๊ฐœ, ์ตœ์†Œ n/2 -1 ๊ฐœ์˜ ํ‚ค๋ฅผ ๊ฐ–๋Š”๋‹คํ…์ŠคํŠธ.

๐Ÿ‘‰ B+ํŠธ๋ฆฌ ๊ธฐ๋Šฅ

1. ํƒ์ƒ‰
n ์ฐจ B+ํŠธ๋ฆฌ์—์„œ k๊ฐ’์„ ํƒ์ƒ‰ํ•˜๊ณ ์ž ํ•œ๋‹ค.

  • root์—์„œ ์‹œ์ž‘ํ•ด ํ‚ค ๊ฐ’๋“ค์„ n-1๊นŒ์ง€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฐพ์„ ๊ฒƒ์ด๋‹ค.
  • ๋งŒ์•ฝ k๊ฐ€ key1๋ณด๋‹ค ์ž‘์œผ๋ฉด, ๋ฃจํŠธ์˜ ์™ผ์ชฝ ์ž์‹์œผ๋กœ ๊ฐ„๋‹ค.
  • ๋งŒ์•ฝ k๊ฐ€ key1์™€ ๊ฐ™์œผ๋ฉด, key2์™€ ๋น„๊ตํ•œ๋‹ค. ๋งŒ์•ฝ key2๋ณด๋‹ค ์ž‘์œผ๋ฉด, k๋Š” key1๊ณผ key2 ์‚ฌ์ด์— ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, key2์˜ ์™ผ์ชฝ ์ž์‹์œผ๋กœ ๊ฐ„๋‹ค.
  • ๋งŒ์•ฝ k๊ฐ€ key2๋ณด๋‹ค ํฌ๋‹ค๋ฉด, key3,key4,...,key(n-1)๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ์ด๋ฅผ leaf ๋…ธ๋“œ์— ๋‹ฟ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • leaf์— k๊ฐ€ ์žˆ๋‹ค๋ฉด true๋ฅผ ์—†๋‹ค๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    (์ด์ง„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๋น ๋ฅธ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.)

2. ์‚ฝ์ž…
B+ํŠธ๋ฆฌ์—์„œ ๋ชจ๋“  ๊ฐ’์€ leaf์— ์‚ฝ์ž…๋˜์–ด์•ผํ•˜๋ฏ€๋กœ, ์ผ๋‹จ์€ ์ ์ ˆํ•œ leaf๊นŒ์ง€ ์ฐพ์•„ ๋“ค์–ด๊ฐ„๋‹ค. ์‚ฝ์ž…์€ ๋‘ ๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค.
1) ์ ์ ˆํ•œ leaf๋ฅผ ์ฐพ๊ณ  ์‚ฝ์ž…
2) ํ•„์š”ํ•˜๋‹ค๋ฉด ์ •๋ฆฌ์™€ ๋ถ„ํ• 

Case#1: leaf๊ฐ€ ๊ฐ€๋“์ฐจ์ง€ ์•Š์•˜์„ ๋•Œ

  • ํ‚ค ๊ฐ’์„ leaf์— ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์‚ฝ์ž…

Case#2: leaf๊ฐ€ ๊ฐ€๋“์ฐผ์„ ๋•Œ

  • ํ‚ค ๊ฐ’์„ leaf์— ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์‚ฝ์ž…, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ฆฌํ•ด์ค€๋‹ค.
  • n/2 ์ง€์ (์ค‘์•™๊ฐ’,median)์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.
  • n/2 ํ‚ค ๊ฐ’์„ ๋ถ€๋ชจ ๋…ธ๋“œ์— ๋ณด๋‚ด์ค€๋‹ค.
  • ๋‚˜๋ˆˆ leaf ๋…ธ๋“œ๋ฅผ ๋งํฌ ์‹œ์ผœ์ค€๋‹ค.
  • ๋งŒ์•ฝ, ๋ถ€๋ชจ ๋…ธ๋“œ๋„ ๊ฐ€๋“ ์ฐพ๋‹ค๋ฉด, ๋ถ€๋ชจ๋„ ์ •๋ฆฌ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

3. ์‚ญ์ œ
B+ํŠธ๋ฆฌ์—์„œ๋Š” ๋‚ด๋ถ€์˜ ๋…ธ๋“œ๊ฐ€ ์ค‘๋ณต๋˜์–ด ์žˆ์Œ์œผ๋กœ(๋‚ด๋ถ€์— ํ•œ ๊ฐœ, leaf์— ํ•œ ๊ฐœ) ์‹ ๊ฒฝ์จ์•ผ ํ•œ๋‹ค. ์‚ญ์ œ๋Š” ๋‹ค์Œ 3๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค.
1) ์‚ญ์ œ๋  ํ‚ค์˜ ์œ„์น˜๋ฅผ ํƒ์ƒ‰ ํ›„ ์‚ญ์ œ
2) ํ•„์š”ํ•˜๋‹ค๋ฉด ์ •๋ฆฌ
3) ํ•„์š”ํ•˜๋‹ค๋ฉด ๋…ธ๋“œ๊ฐ€ ์ตœ์†Œ์˜ ํ‚ค ๊ฐฏ์ˆ˜๋ฅผ ๊ฐ€์ง€์ง€ ๋ชปํ•˜๋Š” underflow์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ

Case#1: leaf์—์„œ๋งŒ ์‚ญ์ œ ๋  ๋•Œ

  • ๋งŒ์•ฝ ์ถฉ๋ถ„ํ•œ ํ‚ค ๊ฐฏ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ทธ๋ƒฅ ์‚ญ์ œํ•œ๋‹ค.
  • ๋งŒ์•ฝ ์‚ญ์ œ ํ›„ ํ‚ค ๊ฐฏ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋ฉด, ํ˜•์ œ ๋…ธ๋“œ์—์„œ ๋นŒ๋ ค์˜จ๋‹ค.

Case#2: ๋‚ด๋ถ€์™€ leaf ์‚ญ์ œ ๋  ๋•Œ

inorder predecessor = ๋‚ด ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ ์ค‘ ๊ฐ€์žฅ ํฐ ํ‚ค
inorder successor = ๋‚ด ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ํ‚ค

B+ํŠธ๋ฆฌ์˜ ํ•ต์‹ฌ์€ leaf์—์„œ ์ผ์–ด๋‚˜๋Š” ์‚ญ์ œ์™€ ๋‚ด๋ถ€์—์„œ ์ผ์–ด๋‚˜๋Š” ์‚ญ์ œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. leaf์— ์ผ์–ด๋‚˜๋Š” ์‚ญ์ œ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์ž๋…€๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ์—ฐ๊ฒฐ์„ฑ๋„ ์‹ ๊ฒฝ์จํ•œ๋‹ค. ๋‚ด๋ถ€์—์„œ ์ผ์–ด๋‚˜๋Š” ์‚ญ์ œ๋Š” inorder successor๋กœ ๋Œ€์ฒด๋œ๋‹ค.

๋˜ํ•œ, leaf์—์„œ ์ผ์–ด๋‚˜๋Š” ์‚ญ์ œ์™€ ๋‚ด๋ถ€์—์„œ ๋ฐธ๋Ÿฐ์‹ฑ๊ณผ ๋ฐธ๋Ÿฐ์‹ฑ๊ณผ ๋ณ‘ํ•ฉ(merge)์„ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•œ๋‹ค. leaf์—์„œ ์ผ์–ด๋‚˜๋Š” ์‚ญ์ œ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ ๋ฆฌํ”„๋…ธ๋“œ๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ์™€ ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค. ๋‚ด๋ถ€์—์„œ ์ผ์–ด๋‚˜๋Š” ๋ฐธ๋Ÿฐ์‹ฑ๊ณผ ๋ณ‘ํ•ฉ์€ ๋น„ํŠธ๋ฆฌ์™€ ๊ฐ™๋‹ค.

  • ๋งŒ์•ฝ leaf ๋…ธ๋“œ์— ์ถฉ๋ถ„ํ•œ ํ‚ค ๊ฐฏ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋‚ด๋ถ€์™€ leaf์˜ ํ‚ค ๊ฐ’์„ ์‚ญ์ œํ•œ๋‹ค. leaf๋Š” ๋‹ค์Œ ํ‚ค์™€ ์—ฐ๊ฒฐ ์‹œ์ผœ์ค€๋‹ค. (๋‚ด๋ถ€ ๋…ธ๋“œ์˜ ๋นˆ ๊ณต๊ฐ„์€ inorder successor๋กœ ๋Œ€์ฒดํ•œ๋‹ค.)

  • ๋งŒ์•ฝ leaf ๋…ธ๋“œ์— ์ถฉ๋ถ„ํ•œ ํ‚ค ๊ฐฏ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋ฉด, ์‚ญ์ œ ํ›„ ํ˜•์ œ ๋…ธ๋“œ์—์„œ ๋นŒ๋ ค์˜จ๋‹ค. ๋นŒ๋ ค์˜จ ๋นˆ ๊ณต๊ฐ„์€ ๋นŒ๋ ค์˜จ ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค. (๋‚ด๋ถ€ ๋…ธ๋“œ์˜ ๋นˆ ๊ณต๊ฐ„์€ inorder successor๋กœ ๋Œ€์ฒดํ•œ๋‹ค.)

  • ๋งŒ์•ฝ leaf ๋…ธ๋“œ์— ์ถฉ๋ถ„ํ•œ ํ‚ค ๊ฐฏ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•˜๊ณ , ํ˜•์ œ ๋…ธ๋“œ์—์„œ ๋นŒ๋ ค์˜ฌ ์ˆ˜ ์—†๋‹ค๋ฉด, ํ˜•์ œ ๋…ธ๋“œ์™€ ๋ณ‘ํ•ฉ์ด ์ผ์–ด๋‚œ๋‹ค. ์ž์‹์€ ํ•ฉ์ณ์ฃผ๊ณ  ๋ถ€๋ชจ๋Š” ์‚ญ์ œ๋œ๋‹ค. (๋‚ด๋ถ€ ๋…ธ๋“œ์˜ ๋นˆ ๊ณต๊ฐ„์€ inorder successor๋กœ ๋Œ€์ฒดํ•œ๋‹ค.)

  • ๋งŒ์•ฝ ๋‚ด๋ถ€์˜ ๋นˆ ๊ณต๊ฐ„์ด, leaf์˜ ํ• ์•„๋ฒ„์ง€(๋ถ€๋ชจ์˜ ๋ถ€๋ชจ)๋…ธ๋“œ ์ผ ๋•Œ, leaf ๋…ธ๋“œ๋Š” ํ˜•์ œ ๋…ธ๋“œ์™€ ํ•ฉ์นœ๋‹ค. ๋นˆ ๊ณต๊ฐ„์€ inorder successor๋กœ ๋Œ€์ฒดํ•œ๋‹ค. -> ์ด๋Ÿฐ ์ผ€์ด์Šค๋ฅผ ๋”ฐ๋กœ ๊ณ ๋ คํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋ฐธ๋Ÿฐ์‹ฑ์ด ์ด๋ฃจ์–ด์ง„ํ›„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์‚ญ์ œํ•  ๊ฐ’์ด ์žˆ๋Š” ์ง€ ๊ฒ€ํ† ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

Case#3: ํŠธ๋ฆฌ์˜ ๋†’์ด(height)๊ฐ€ ์ถ•์†Œ ๋  ๋•Œ

  • leaf์—์„œ ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚˜ ํ‚ค ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•˜์ง€๋งŒ ํ˜•์ œ์—์„œ ๋นŒ๋ ค์˜ฌ ์ˆ˜ ์—†์–ด ๋ณ‘ํ•ฉ์ด ์ผ์–ด๋‚œ ๋’ค ๋ถ€๋ชจ ๋…ธ๋“œ์—์„œ๋„ ํ‚ค ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•˜์ง€๋งŒ ๋นŒ๋ ค์˜ฌ ๊ณณ์ด ์—†๋Š” ๊ฒฝ์šฐ ๋˜ ๋ณ‘ํ•ฉ์ด ์ผ์–ด๋‚˜๋ฉด์„œ ์ถ•์†Œ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.
profile
Jazzing๐Ÿ‘จโ€๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€