Hello Ocean! ๐ŸŒผ

[CS/์ž๋ฃŒ๊ตฌ์กฐ] ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ (BST) ๋ณธ๋ฌธ

Algorithm

[CS/์ž๋ฃŒ๊ตฌ์กฐ] ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ (BST)

bba_dda 2021. 10. 9. 14:09
๋ฐ˜์‘ํ˜•

Binary Search Tree(์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ)๋ž€?

์ด์ง„ ํƒ์ƒ‰ + ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฒฐํ•ฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…

์ด์ง„ ํƒ์ƒ‰์˜ ํšจ์œจ์ ์ธ ํƒ์ƒ‰ ๋Šฅ๋ ฅ + ๋นˆ๋ฒˆํ•œ ์‚ฝ์ž…/์‚ญ์ œ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ณ ์•ˆ

์ด์ง„ ํƒ์ƒ‰ ๋ณต์žก๋„ : O(logN)

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์‚ฝ์ž…/์‚ญ์ œ ๋ณต์žก๋„ : O(1)

์†์„ฑ

๊ฐ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—๋Š” ํ•ด๋‹น ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง„ ๋…ธ๋“œ๋“ค๋กœ,

๊ฐ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—๋Š” ํ•ด๋‹น ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์˜ ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘๋ณต๋˜๋Š” ๋…ธ๋“œ๋Š” ์—†์–ด์•ผ ํ•˜๋ฉฐ, ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋˜ํ•œ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.

์ˆœํšŒ์‹œ์—๋Š” ์ค‘์œ„์ˆœํšŒ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด, ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ ๋‚ด์˜ ๋ชจ๋“  ๊ฐ’๋“ค์„ ์ •๋ ฌ๋œ ์ˆœ์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ค‘์œ„ ์ˆœํšŒ : ์™ผ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ -> root -> ์˜ค๋ฅธ์ชฝ ํ•˜์œ„ํŠธ๋ฆฌ

์—ฐ์‚ฐ

๊ฒ€์ƒ‰ / ์‚ฝ์ž… / ์‚ญ์ œ

์ƒ์„ฑ / ์‚ญ์ œ / isEmpty / ์ˆœํšŒ

  • ์‚ฝ์ž…O(h)๋ฒˆ ํƒ์ƒ‰ ํ›„ ์‚ฝ์ž…ํ•˜๊ธด ํ•˜์ง€๋งŒ, ์‚ฝ์ž…์˜ ๊ณ„์‚ฐ๋ณต์žก๋„๋Š” O(1)์ด๋ผ ๋ฌด์‹œํ• ๋งŒํ•˜๋‹ค
  • ํ•ญ์ƒ ๋ฆฌํ”„๋…ธ๋“œ์— ์‚ฝ์ž…
  • ๊ฒ€์ƒ‰
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(h) (ํŠธ๋ฆฌ์˜ ๋†’์ด :h)
  • ์‚ญ์ œ
    • ๊ทธ๋ƒฅ ์‚ญ์ œํ•˜๋ฉด๋จ
      2) ์ž์‹๋…ธ๋“œ๊ฐ€ ํ•œ ๊ฐœ์ธ ๊ฒฝ์šฐ
    • ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์ง€์šฐ๊ณ , ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์™€, ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ž์‹์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋จ
      3) ์ž์‹๋…ธ๋“œ๊ฐ€ ๋‘ ๊ฐœ์ธ ๊ฒฝ์šฐ
    • ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ (์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’)
    • ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ์™ผ์ชฝ ๋…ธ๋“œ (์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’)
    • ์ค‘์— ์›ํ•˜๋Š” ๊ฑธ๋กœ ์‚ญ์ œํ•  ๋…ธ๋“œ๋ฅผ ๋Œ€์ฒดํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
  • 1) ์ž์‹๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ

ํ•œ๊ณ„์ 

์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ ํ•ต์‹ฌ ์—ฐ์‚ฐ์ธ ํƒ์ƒ‰/์‚ฝ์ž…/์‚ญ์ œ์˜ ๋ณต์žก๋„๋Š” ๋ชจ๋‘ O(h) ๋กœ, ํŠธ๋ฆฌ์˜ ๋†’์ด์— ๋”ฐ๋ผ ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ๊ฒฐ์ •๋˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ํ•œ ๊ฐœ์˜ ๋ฆฌํ”„๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ์ธ ๊ฒฝ์šฐ์—๋Š” ๋…ธ๋“œ ์ˆ˜์™€, ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ์ผ์น˜ํ•˜๊ฒŒ ๋˜์–ด ์—ฐ์‚ฐ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N)์ด ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋น ๋ฅด๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ „์ฒด ๊ท ํ˜•์„ ๋งž์ถ”๋Š” ์ด์ง„ ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ์ผ์ข…์ธ AVL tree๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

** AVLํŠธ๋ฆฌ ์ •๋ฆฌ ์˜ˆ์ •

์š”์•ฝ

์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ๋ž€ ์ด์ง„ํƒ์ƒ‰๊ณผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฒฐํ•ฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…์œผ๋กœ,

ํšจ์œจ์ ์ธ ํƒ์ƒ‰ ๋ฐ ๋นˆ๋ฒˆํ•œ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ณ ์•ˆ๋œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๊ฐ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—๋Š” ํ•ด๋‹น ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๋…ธ๋“œ๋“ค๋กœ,

๊ฐ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—๋Š” ํ•ด๋‹น ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ํฐ ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ 

์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋˜ํ•œ ๋ชจ๋‘ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.

** O(h) -> O(logn)์œผ๋กœ ํ‘œํ˜„

์ด์ง„ ํƒ์ƒ‰ํŠธ๋ฆฌ์—์„œ ํƒ์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ h์ผ ๋•ŒO(h)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์‚ฝ์ž… ์‹œ์—๋Š”, ํ•ญ์ƒ ๋ฆฌํ”„๋…ธ๋“œ์— ์‚ฝ์ž…ํ•˜๋ฉฐ O(h)๋ฒˆ ํƒ์ƒ‰ ํ›„ ์‚ฝ์ž…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ํƒ์ƒ‰๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ O(h)์ž…๋‹ˆ๋‹ค.

์‚ญ์ œ๋Š” ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ

๋จผ์ € ์ž์‹๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ƒฅ ์‚ญ์ œํ•˜๋ฉด ๋˜๊ณ 

์ž์‹๋…ธ๋“œ๊ฐ€ ํ•œ๊ฐœ์ผ ๊ฒฝ์šฐ์—๋Š” ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์™€ ์ž์‹์„ ์—ฐ๊ฒฐํ•ด์ฃผ๊ณ  ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ž์‹๋…ธ๋“œ๊ฐ€ ๋‘ ๊ฐœ์ผ ๊ฒฝ์šฐ์—๋Š”,

์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ์ž‘์€๊ฐ’ ํ˜น์€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ์•„

๋‘˜ ์ค‘์— ์›ํ•˜๋Š” ๋…ธ๋“œ๋กœ ์‚ญ์ œํ•  ๋…ธ๋“œ๋ฅผ ๋Œ€์ฒดํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด์ง„ ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ํ•œ๊ณ„์ ์€, ์ค‘์š” ์—ฐ์‚ฐ๋“ค์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ํŠธ๋ฆฌ์˜ ๋†’์ด์™€ ๊ด€๋ จ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ํ•œ ๊ฐœ์˜ ๋ฆฌํ”„๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ์—๋Š” ๋…ธ๋“œ์ˆ˜์™€ ํŠธ๋ฆฌ ๋†’์ด๊ฐ€ ์ผ์น˜ํ•˜๊ฒŒ ๋˜์–ด ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•