๐Ÿง‘๐Ÿป‍๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜/ํƒ์ƒ‰ ํŠธ๋ฆฌ

[ํƒ์ƒ‰ ํŠธ๋ฆฌ] ํ•œ ์‚ด๋„ ์ดํ•ดํ•˜๋Š” B-ํŠธ๋ฆฌ

10000COW 2022. 12. 2. 14:32
728x90

B-ํŠธ๋ฆฌ๋ž€?

B-ํŠธ๋ฆฌ(B-tree)๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…์œผ๋กœ,

์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•ด ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

 


์ฐจ์ˆ˜๊ฐ€ p์ธ B-ํŠธ๋ฆฌ์˜ ํŠน์„ฑ

 

1)์ ์–ด๋„ ๋…ธ๋“œ์˜ ๋ฐ˜์€ ์ฑ„์›Œ์•ผ ํ•œ๋‹ค.

์ฆ‰, root์™€ leaf๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ์˜ pointer ์ˆ˜ = ์„œ๋ธŒํŠธ๋ฆฌ ์ˆ˜ =  ์ตœ์†Œ

 

 

 

   leaf๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ: pointer ์ˆ˜  - 1 ๊ฐœ = ์„œ๋ธŒํŠธ๋ฆฌ ์ˆ˜ - 1๊ฐœ

   (์•„๋ž˜ B-ํŠธ๋ฆฌ ๊ธฐ๋ณธ ๊ตฌ์กฐ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด, key์˜ ๊ฐœ์ˆ˜๋Š” (pointer ๊ฐœ์ˆ˜ - 1)์ผ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. pointer ์‚ฌ์ด์‚ฌ์ด์— key๊ฐ€ ๋“ค์–ด๊ฐ€๋ฏ€๋กœ!)

 

 


B-ํŠธ๋ฆฌ ๊ธฐ๋ณธ ๊ตฌ์กฐ

B-ํŠธ๋ฆฌ ๊ธฐ๋ณธ ๊ตฌ์กฐ: ๋…ธ๋“œ, Key, Pointer

 

 

 

B-ํŠธ๋ฆฌ ๋…ธ๋“œ ๊ตฌ์กฐ

 

 


B-ํŠธ๋ฆฌ์˜ ๊ฒ€์ƒ‰

๋‚ด๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š” Key ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

์˜ˆ๋ฅผ๋“ค์–ด, key ๊ฐ’์ด 42์ธ key๋ฅผ ์ฐพ๋Š”๋‹ค๊ณ  ํ•˜๋ฉด, pointer๋ฅผ ๋”ฐ๋ผ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ด๋™ํ•˜๋ฉฐ ๊ฒ€์ƒ‰์„ ํ•œ๋‹ค.

ํ•ด๋‹นํ•˜๋Š” ๋ธ”๋ก ๋‚ด์—์„œ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ˆœ์ฐจ ํƒ์ƒ‰์„ ํ•œ๋‹ค.

B-ํŠธ๋ฆฌ ๊ฒ€์ƒ‰


B-ํŠธ๋ฆฌ์˜ ์‚ฝ์ž…

- ์ƒˆ๋กœ์šด Key๋Š” leaf ๋…ธ๋“œ์— ์‚ฝ์ž…ํ•œ๋‹ค

- ๋…ธ๋“œ์— ์ƒˆ๋กœ์šด key๊ฐ€ ๋“ค์–ด๊ฐˆ ๋นˆ ๊ณต๊ฐ„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹จ์ˆœํžˆ leaf ๋…ธ๋“œ์— ์‚ฝ์ž…ํ•œ๋‹ค.

- ๋นˆ ๊ณต๊ฐ„์ด ์—†๋Š” ๊ฒฝ์šฐ, ์ฆ‰ overflow๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ถ„ํ• (split)ํ•œ ํ›„ ์‚ฝ์ž…ํ•œ๋‹ค.

 

๋ถ„ํ• (split)

์‚ฝ์ž…ํ•  key ๊ฐ’์„ ๋…ธ๋“œ์— ๋„ฃ์—ˆ์„ ๋•Œ, ์ด key์˜ ๊ฐœ์ˆ˜๋ฅผ M์ด๋ผ๊ณ  ํ•˜์ž.(์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ 10, 20, 30์ด๋ฏ€๋กœ ์ด ๊ฐœ์ˆ˜ M = 3)

1. ⌈M / 2⌉ ๋ฒˆ์งธ์˜ key ๊ฐ’์„ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ์ด๋™ํ•œ๋‹ค. (๋งŒ์•ฝ, ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด ์ค€๋‹ค.)

(์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ 20์„ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ์˜ฌ๋ ค์ค€๋‹ค!)

2. ๋‚˜๋จธ์ง€ key ๊ฐ’๋“ค์€ ์ ˆ๋ฐ˜์”ฉ ๋‚˜๋ˆ„์–ด ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ๋œ๋‹ค.

 

 

B-ํŠธ๋ฆฌ ์‚ฝ์ž… ์‹œ ๋ถ„ํ• (split)

์—ญ์‹œ ๋ฐฑ๋ฌธ์ด ๋ถˆ์—ฌ์ผrun

์ง์ ‘ ์‚ฝ์ž…์„ ํ•ด๋ณด์ž!

 

์ฃผ์–ด์ง„ ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ฐจ์ˆ˜๊ฐ€ 3์ธ 3์› B-ํŠธ๋ฆฌ์ด๋ฏ€๋กœ, ์•ž์„œ ๋ดค๋˜ B-ํŠธ๋ฆฌ์˜ ํŠน์„ฑ์„ ๋ณต์Šตํ•  ๊ฒธ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ณด์ž.

p=3 ์ด๋ฏ€๋กœ, 

B-ํŠธ๋ฆฌ ์˜ˆ์‹œ


์ฐจ์ˆ˜๊ฐ€ 3์ธ B-ํŠธ๋ฆฌ์˜ ํŠน์„ฑ

1)์ ์–ด๋„ ๋…ธ๋“œ์˜ ๋ฐ˜์€ ์ฑ„์›Œ์•ผ ํ•œ๋‹ค.

์ฆ‰, root์™€ leaf๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ์˜ pointer ์ˆ˜ = ์„œ๋ธŒํŠธ๋ฆฌ ์ˆ˜ =  ์ตœ์†Œ 2๊ฐœ (

 

 

 

   leaf๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ: pointer ์ˆ˜  - 1 ๊ฐœ = ์„œ๋ธŒํŠธ๋ฆฌ ์ˆ˜ - 1๊ฐœ

   (์•„๋ž˜ B-ํŠธ๋ฆฌ ๊ธฐ๋ณธ ๊ตฌ์กฐ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด, key์˜ ๊ฐœ์ˆ˜๋Š” (pointer ๊ฐœ์ˆ˜ - 1)์ผ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. pointer ์‚ฌ์ด์‚ฌ์ด์— key๊ฐ€ ๋“ค์–ด๊ฐ€๋ฏ€๋กœ!)

 

 


(1) 22๋ฅผ ์‚ฝ์ž… (ํŒŒ๋ž€์ƒ‰ ์„ ์„ ๋”ฐ๋ผ๊ฐ€๋ณด์ž)

22๊ฐ€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฏ€๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ ์‚ฝ์ž…ํ•œ๋‹ค.

[20,    ]  ->  [20,  22] 

 

22๊ฐ€ ์‚ฝ์ž…๋  leaf ๋…ธ๋“œ์—๋Š” ๋นˆ ๊ณต๊ฐ„์ด ์กด์žฌํ•˜๋ฏ€๋กœ ๋‹จ์ˆœ ์‚ฝ์ž…ํ•œ๋‹ค. 41๋„ ์ง์ ‘ํ•ด๋ณด์ž!(์—ฐ๋‘์ƒ‰ ์„ )

(2) 59๋ฅผ ์‚ฝ์ž…

59๋ฅผ ์‚ฝ์ž…ํ•˜๋ ค๊ณ  ํ–ˆ๋”๋‹ˆ, 59๊ฐ€ ๋“ค์–ด๊ฐˆ leaf ๋…ธ๋“œ์—๋Š” ์ด๋ฏธ 50,58๋กœ ๊ฝ‰ ์ฐจ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ถ„ํ• (split)์„ ํ•ด์ค„ ๋•Œ!
[50, 58, 59]

1) ํ˜„์žฌ ์ด key ๊ฐ’์ด 3๊ฐœ์ด๋ฏ€๋กœ, ⌈M / 2⌉ ๋ฒˆ์งธ = ⌈3 / 2⌉ = 2 ๋ฒˆ์งธ ๊ฐ’, ์ฆ‰ 58์„ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ์˜ฌ๋ ค์ค€๋‹ค.

=> ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” [60,   ] ์—์„œ  [58, 60] ์ด ๋˜๊ฒ ์ฃ ?

 

2) 50๊ณผ 59๋Š” ๊ฐ๊ฐ  [58 ,60] ์ค‘ 58์˜ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์˜ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ๋œ๋‹ค.

 

57๋„ ์ง์ ‘ ๋„ฃ์–ด๋ณด์ž! ๋‹จ์ˆœ ์‚ฝ์ž…

3) 54๋ฅผ ์‚ฝ์ž…

์กฐ๊ธˆ ๋” ์–ด๋ ต๋‹ค. ๋ถ„ํ• ์ด ๋‘ ๋ฒˆ ์ด์ƒ ๋‚˜์˜ค๋Š” ์œ ํ˜•! ์ด๊ฒƒ๊นŒ์ง€ ์ดํ•ดํ•˜๋ฉด ์‚ฝ์ž…์€ ๊ฑฐ์˜ ๋‹ค ์ดํ•ดํ–ˆ๋‹ค๊ณ  ๋ด๋„๋˜๋ฏ€๋กœ ๋„์ „ํ•ด๋ณด์ž.

์ž, ์šฐ์„  54๋ฅผ ๋„ฃ์„ leaf ๋…ธ๋“œ๋ฅผ ์ฐพ์•„๊ฐ€ ๋ดค๋”๋‹ˆ [50, 57]๋กœ ๊ฝ‰ ์ฐจ์žˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ๋ถ„ํ• ์„ ํ•ด์ค€๋‹ค.

[50, 54, 57]

1) ํ˜„์žฌ ์ด key ๊ฐ’์ด 3๊ฐœ์ด๋ฏ€๋กœ, ⌈M / 2⌉ ๋ฒˆ์งธ = ⌈3 / 2⌉ = 2 ๋ฒˆ์งธ ๊ฐ’, ์ฆ‰ 54๋ฅผ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ์˜ฌ๋ ค์ค€๋‹ค.

2) ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ [58, 60]์œผ๋กœ ๊ฝ‰ ์ฐจ ์žˆ์œผ๋ฏ€๋กœ ์—ญ์‹œ ๋ถ„ํ• ์„ ์‹œ์ž‘ํ•œ๋‹ค.

 

 

[54, 58, 60]

2-1) ํ˜„์žฌ ์ด key ๊ฐ’์ด 3๊ฐœ์ด๋ฏ€๋กœ, ⌈M / 2⌉ ๋ฒˆ์งธ = ⌈3 / 2⌉ = 2 ๋ฒˆ์งธ ๊ฐ’, ์ฆ‰ 58๋ฅผ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ์˜ฌ๋ ค์ค€๋‹ค.

2-2) ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ [19, 43]์œผ๋กœ ๊ฝ‰ ์ฐจ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ๋„ ๋ถ„ํ• ์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค!

 

[19, 43, 58]

3-1) ํ˜„์žฌ ์ด key ๊ฐ’์ด 3๊ฐœ์ด๋ฏ€๋กœ, ⌈M / 2⌉ ๋ฒˆ์งธ = ⌈3 / 2⌉ = 2 ๋ฒˆ์งธ ๊ฐ’, ์ฆ‰ 43์„ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ์˜ฌ๋ ค์ค€๋‹ค.

3-2) ๋ถ€๋ชจ ๋…ธ๋“œ์ธ [69,  ]์— ๋นˆ ์ž๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋‹จ์ˆœ ์‚ฝ์ž…ํ•ด์ค€๋‹ค. 

[69,  ]   =>  [43, 69] 

3-3) 19์™€ 58๋Š” ๊ฐ๊ฐ  [43 ,69] ์ค‘ 43์˜ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์˜ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ๋œ๋‹ค. [19,  ] ์™€  [58,  ] ์ด ๋˜๊ฒ ์ฃ ? 

3-4) 54์™€ 60์€ [58,   ]์˜ ๊ฐ๊ฐ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ๋œ๋‹ค.  [54,   ]์™€  [60,  ] ์ด ๋œ๋‹ค.

3-5) 50๊ณผ 57์€ [54,  ]์˜ ๊ฐ๊ฐ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๊ฐ€ ๋œ๋‹ค.  [50,   ]์™€  [57,  ] ์ด ๋œ๋‹ค.

 

๊ฐ ๋…ธ๋“œ์˜ pointer๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋˜ ๊ณณ์€ ๊ทธ๋ž˜๋„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์œ ์ง€ํ•ด์ค€๋‹ค.

 

๊ฒฐ๊ตญ overflow๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ถ„ํ• ํ•˜๋Š” ๊ณผ์ •์˜ ๋ฐ˜๋ณต์ด๋‹ค. ์ง์ ‘ ๊ทธ๋ ค๋ณด๋ฉด์„œ ํ•˜๋‹ค ๋ณด๋ฉด ์–ด๋ ต์ง€ ์•Š๋‹ค.

 

54 ์‚ฝ์ž… ์ตœ์ข… ๊ฒฐ๊ณผ


B - ํŠธ๋ฆฌ์˜ ์‚ญ์ œ

 

1) ์‚ญ์ œํ•  ํ‚ค๊ฐ€ leaf ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ

ํ›„ํ–‰ ํ‚ค ๊ฐ’๊ณผ ์ž๋ฆฌ ๊ตํ™˜ ํ›„ leaf ๋…ธ๋“œ์—์„œ ์‚ญ์ œ

(์„ ํ–‰ ํ‚ค๋ž‘ ๊ตํ™˜ํ• ์ง€ ๋˜๋Š” ํ›„ํ–‰ํ‚ค๋ž‘ ๊ตํ™˜ํ• ์ง€๋Š” ์ •ํ•˜๋Š” ์‚ฌ๋žŒ ๋งˆ์Œ์ด๋‹ค. ์šฐ๋ฆฐ ํ›„ํ–‰ํ‚ค์™€ ๊ตํ™˜์œผ๋กœ ์ •ํ•˜์ž!

์„ ํ–‰ ํ‚ค๋Š” ํ•ด๋‹น key๋ณด๋‹ค ํŠธ๋ฆฌ์—์„œ ์™ผ์ชฝ์— ์žˆ๋Š” key ๊ฐ’์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’,  ์ฆ‰, ๋‚˜๋ณด๋‹ค ์ž‘์€ ๊ฐ’ ์ค‘์— ์ตœ๋Œ€๊ฐ’

ํ›„ํ–‰ ํ‚ค๋Š” ํ•ด๋‹น key๋ณด๋‹ค ํŠธ๋ฆฌ์—์„œ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” key ๊ฐ’์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’, ์ฆ‰ ๋‚˜๋ณด๋‹ค ํฐ ๊ฐ’ ์ค‘์— ์ตœ์†Œ๊ฐ’ ์„ ๋งํ•œ๋‹ค.)

 

2) ์‚ญ์ œํ•  ํ‚ค๊ฐ€ leaf ๋…ธ๋“œ์ธ ๊ฒฝ์šฐ

๋‹จ์ˆœ ์‚ญ์ œ

๋˜๋Š”

leaf ๋…ธ๋“œ์—์„œ underflow ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ์— (leaf ๋…ธ๋“œ์˜ key ๊ฐœ์ˆ˜๊ฐ€ ์ตœ์†Œ 

์žฌ๋ถ„๋ฐฐ(redistrubution) ๋˜๋Š” ํ•ฉ๋ณ‘(merge) ํ•„์š”

 

์žฌ๋ถ„๋ฐฐ - ํ˜•์ œ ๋…ธ๋“œ๊ฐ€ ์ตœ์†Œ key ๊ฐœ์ˆ˜ ๋ณด๋‹ค ๋งŽ์€  key๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ

ํ˜•์ œ ๋…ธ๋“œ์˜ key -> ๋ถ€๋ชจ ๋…ธ๋“œ->  ๋ถ€๋ชจ ๋…ธ๋“œ์— ์žˆ๋˜ ํ‚ค ๊ฐ’์„ underflow ๋ฐœ์ƒํ•œ ๋…ธ๋“œ๋กœ ์ด๋™, ๋ถ€๋ชจ ๋…ธ๋“œ์— ํ˜•์ œ ๋…ธ๋“œ์˜ key๊ฐ€ ์œ„์น˜ํ•จ.

 

ํ•ฉ๋ณ‘ - ์žฌ๋ถ„๋ฐฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ (ํ˜•์ œ ๋…ธ๋“œ๋„ ์ตœ์†Œ key ๊ฐœ์ˆ˜๋ฅผ ๊ฐ–๋Š” ๋ฐ ์žˆ์–ด์„œ ์‚ฌ์ •์ด ๋งˆ๋•…์น˜ ์•Š์„ ๊ฒฝ์šฐ)

ํ˜•์ œ ๋…ธ๋“œ + ๋ถ€๋ชจ ๋…ธ๋“œ์˜ key + underflow ๋…ธ๋“œ๋ฅผ ํ•ฉ์ณ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋กœ ํ•ฉ๋ณ‘

 

์—ญ์‹œ ๋ฐฑ๋ฌธ์ด ๋ถˆ์—ฌ์ผrun!

์ง์ ‘ ์‚ญ์ œ๋ฅผ ํ•ด๋ณด์ž.

16 ์‚ญ์ œ

1) 16 ์‚ญ์ œ

16์€ leaf ๋…ธ๋“œ์˜ key๊ฐ’์ด ์•„๋‹Œ ์ค‘๊ฐ„ ๋…ธ๋“œ์— ์žˆ์œผ๋ฏ€๋กœ, ํ›„ํ–‰ ํ‚ค์ธ 18๊ณผ ๊ตํ™˜ ํ›„์— ์‚ญ์ œํ•œ๋‹ค.

16๊ณผ 18์„ ์ž๋ฆฌ ๊ตํ™˜ ํ›„ ์‚ญ์ œ

์•— ๊ทธ๋Ÿฐ๋ฐ ํ›„ํ–‰ ํ‚ค์™€ ๊ตํ™˜ํ•œ ํ›„ leaf ๋…ธ๋“œ์—์„œ 16์„ ์‚ญ์ œํ–ˆ๋”๋‹ˆ underflow๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

(16์ด ์žˆ๋˜ ๋…ธ๋“œ์— key์˜ ๊ฐœ์ˆ˜๊ฐ€ 0์ด ๋˜๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ)

 

๊ทธ๋ ‡๋‹ค๋ฉด ์žฌ๋ถ„๋ฐฐ๋ฅผ ์‹œ๋„ํ•ด๋ณธ๋‹ค. ํ˜•์ œ ๋…ธ๋“œํ•œํ…Œ ๊ฐ€์„œ ํ˜•ํŽธ์ด ๋œ๋‹ค๋ฉด ๊ฟ”์˜จ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค! ๋งˆ์น˜ ํฅ๋ถ€์™€ ๋†€๋ถ€์ฒ˜๋Ÿผ..

๊ทธ๋Ÿฐ๋ฐ.. ํ˜•์ œ ๋…ธ๋“œ์ธ j๊ฐ€ 15๋ฅผ ๋นŒ๋ ค์ฃผ๋ฉด j๋„ underflow๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์žฌ๋ถ„๋ฐฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

(๋†€๋ถ€ ํ˜•๋‹˜ j ๋„ ํ˜•ํŽธ์ด ์ข‹์ง€ ์•Š์•˜๋‹ค)

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋งˆ์ง€๋ง‰์œผ๋กœ ํ•ฉ๋ณ‘์„ ์‹œ๋„ํ•œ๋‹ค.

 

๋ถ€๋ชจ, ํ˜•์ œ, underflow ๋…ธ๋“œ์˜ ํ•ฉ๋ณ‘

๋ถ€๋ชจ ๋…ธ๋“œ์˜ key ๊ฐ’์ธ 18๊ณผ ํ˜•์ œ ๋…ธ๋“œ, underflow๊ฐ€ ๋ฐœ์ƒํ•œ ๋…ธ๋“œ๋ฅผ ํ•ฉ๋ณ‘ํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ 18์ด ํ•ฉ๋ณ‘๋˜๋ฉด์„œ ์›๋ž˜ ๋ถ€๋ชจ ๋…ธ๋“œ d์—์„œ underflow๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. (18์ด ์žˆ๋˜ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ key ๊ฐœ์ˆ˜๊ฐ€ 0)

์ด ์—ญ์‹œ ์žฌ๋ถ„๋ฐฐ๋ฅผ ์‹œ๋„ํ•ด๋ณด๊ณ , ์•ˆ๋˜๋ฉด ํ•ฉ๋ณ‘์„ ์ง„ํ–‰ํ•œ๋‹ค.

 

์—ญ์‹œ ์žฌ๋ถ„๋ฐฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํ•ฉ๋ณ‘!

d์˜ ํ˜•์ œ ๋…ธ๋“œ e๊ฐ€ 26์„ ์ฃผ๊ฒŒ๋˜๋ฉด ์—ญ์‹œ ์ตœ์†Œ key ๊ฐœ์ˆ˜๋ฅผ ๊ฐ–์ง€ ๋ชปํ•˜๋ฏ€๋กœ, ํ•ฉ๋ณ‘์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์‚ญ์ œ๋ฅผ ์œ„ํ•œ ๋ชจ๋“  ๊ณผ์ •์„ ์ดํ•ดํ–ˆ๋‹ค.

 

B-ํŠธ๋ฆฌ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค.

- B-ํŠธ๋ฆฌ๋Š” leaf leveld์€ ๊ณ„์† ์œ ์ง€๋˜๋ฉด์„œ,

- ๋…ธ๋“œ๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด root ๋ฐฉํ–ฅ ์ชฝ์œผ๋กœ ๋Š˜์–ด๋‚˜๊ณ 

- ์ค„์–ด๋“ค๋ฉด root ๋ถ€ํ„ฐ ์ค„์–ด๋“ ๋‹ค.


์‹œ๊ฐ„ ๋ณต์žก๋„

Red-Black ํŠธ๋ฆฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•ญ์ƒ ์ขŒ, ์šฐ ์ž์‹ ๋…ธ๋“œ ๊ฐœ์ˆ˜์˜ ๋ฐธ๋Ÿฐ์Šค๋ฅผ ์œ ์ง€ํ•˜๋ฏ€๋กœ ํ•ญ์ƒ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(logN)์„ ๋ณด์žฅํ•œ๋‹ค.

๋ฐฐ์—ด, ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ, Red-Black ํŠธ๋ฆฌ, B-ํŠธ๋ฆฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋น„๊ตํ•ด๋ณด๋ฉด,

๋ฐฐ์—ด์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n)

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ํ‰๊ท ์ ์œผ๋กœ O(log n), ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n) ํ•œ ์ค„๋กœ ์ญ‰ ๋‚˜๊ฐ€๋Š” ๊ฒฝ์šฐ..

Red-Black ํŠธ๋ฆฌ์™€ B-Tree๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(log n )

 

B-Tree์™€ Red-Black Tree์˜ ์ฐจ์ด (์ •๋ณด ์ถœ์ฒ˜: https://steady-coding.tistory.com/558)

์šฐ์„ , B-Tree๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์„ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ํ•œ ๋…ธ๋“œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ key๊ฐ’์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ!

B-Tree์˜ ๊ฐ ๋…ธ๋“œ๋Š” ๋ฐฐ์—ด๋กœ์„œ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์ฐจ๋ก€๋Œ€๋กœ ์ €์žฅ์ด ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

๊ฐ™์€ ๋…ธ๋“œ ๊ณต๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋“ค๋ผ๋ฆฌ ๊ตณ์ด ์ž์‹ ๋…ธ๋“œ์ฒ˜๋Ÿผ ์ฐธ์กฐ ํฌ์ธํ„ฐ ๊ฐ’์œผ๋กœ ์ ‘๊ทผํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

์ฆ‰, ๊ฐ™์€ ๋…ธ๋“œ ์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ๋Š” ํฌ์ธํ„ฐ ์ ‘๊ทผ์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ๋””์Šคํฌ์—์„œ ๋ฐ”๋กœ ๋‹ค์Œ ์ธ๋ฑ์Šค์— ์ ‘๊ทผ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฐ˜๋ฉด RedBlack-Tree๋Š” ๊ฐ ๋…ธ๋“œ๋งˆ๋‹ค ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฏ€๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•  ๋•Œ ๋ฌด์กฐ๊ฑด ์ฐธ์กฐ ํฌ์ธํ„ฐ๋กœ ์ ‘๊ทผํ•œ๋‹ค. 

728x90