๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[์ž๋ฃŒ ๊ตฌ์กฐ] ์ž๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ Self-Balancing Binary Search Tree

์ถœ์ฒ˜

ChatGPT


์ž๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(Self-Balancing Binary Search Tree)๋Š” ์‚ฝ์ž…, ์‚ญ์ œ ๋“ฑ์˜ ์—ฐ์‚ฐ ํ›„์—๋„ ํ•ญ์ƒ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋Š” ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST, Binary Search Tree)์ด๋‹ค. ์ž๊ฐ€ ๊ท ํ˜• ํŠธ๋ฆฌ๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ์ปค์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ, ๋ชจ๋“  ์—ฐ์‚ฐ(ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ)์˜ ์„ฑ๋Šฅ์„ ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.

์ผ๋ฐ˜ ์ ์ธ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ ์—ฐ์‚ฐ์— ์˜ํ•ด ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์ณ์ง„(skewed) ํŠธ๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ n์— ๊ฐ€๊นŒ์›Œ์ ธ ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n)์˜ ์„ฑ๋Šฅ์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ์ž๊ฐ€ ๊ท ํ˜• ํŠธ๋ฆฌ๋Š” ์ด๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.

 

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

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

  • ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ : ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด ์ž‘๋‹ค
  • ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ : ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด ํฌ๋‹ค

 

์™œ ๊ท ํ˜•์ด ์ค‘์š”ํ• ๊นŒ?

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

 

์˜ˆ์‹œ : ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์—์„œ ์น˜์šฐ์ณ์ง„ ๊ฒฝ์šฐ

  1
   \
    2
     \
      3
       \
        4

 

์ด์™€ ๊ฐ™์€ ํŠธ๋ฆฌ๋Š” ์‚ฌ์‹ค์ƒ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ ๋‹ค๋ฅผ ๋ฐ”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์ด ๋น„ํšจ์œจ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ž๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž๋™์œผ๋กœ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•œ๋‹ค.

 

์ž๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๋™์ž‘ ์›๋ฆฌ

์ž๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ํŠธ๋ฆฌ์˜ ์‚ฝ์ž…, ์‚ญ์ œ ์‹œ์— ์ž๋™์œผ๋กœ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์„ ๋งž์ถ”๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด ๊ณผ์ •์€ ํšŒ์ „๊ณผ ์žฌ๋ฐฐ์น˜ ๋“ฑ์„ ํ†ตํ•ด ์ด๋ค„์ง„๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์ž๊ฐ€ ๊ท ํ˜• ํŠธ๋ฆฌ๋กœ๋Š” ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ, AVL ํŠธ๋ฆฌ ๋“ฑ์ด ์žˆ๋‹ค.

 

์ฃผ์š” ์ž๊ฐ€ ๊ท ํ˜• ํŠธ๋ฆฌ ์ข…๋ฅ˜

1. ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ Red-Black Tree

ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๋ฅผ ๋ ˆ๋“œ์™€ ๋ธ”๋ž™์œผ๋กœ ์ƒ‰์น ํ•˜๊ณ , ํŠน์ • ๊ทœ์น™์„ ์ ์šฉํ•ด ํŠธ๋ฆฌ๊ฐ€ ํ•œ ์ชฝ์œผ๋กœ ์น˜์šฐ์น˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.

์‚ฝ์ž… ๋ฐ ์‚ญ์ œ ํ›„ ํšŒ์ „์ด๋‚˜ ์ƒ‰์ƒ ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ๊ท ํ˜•์„ ๋งž์ถ˜๋‹ค.

์ž๋ฐ”์˜ TreeSet, TreeMap์€ ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

2. AVL ํŠธ๋ฆฌ

์‚ฝ์ž… ๋ฐ ์‚ญ์ œ ํ›„ ๊ฐ ๋…ธ๋“œ์˜ ๊ท ํ˜• ์ธ์ˆ˜(๋†’์ด ์ฐจ)๋ฅผ ํ™•์ธํ•ด ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•œ๋‹ค.

๋†’์ด ์ฐจ๊ฐ€ 1 ์ด์ƒ ๋‚˜๋ฉด ์ขŒ์šฐ ํšŒ์ „์„ ํ†ตํ•ด ๊ท ํ˜•์„ ์œ ์ง€ํ•œ๋‹ค.

 

์ž๊ฐ€ ๊ท ํ˜• ํŠธ๋ฆฌ์˜ ์žฅ์ 

1. ํ•ญ์ƒ O(log n)์˜ ์„ฑ๋Šฅ ๋ณด์žฅ

์ž๊ฐ€ ๊ท ํ˜• ํŠธ๋ฆฌ๋Š” ์‚ฝ์ž…, ์‚ญ์ œ ๋“ฑ์˜ ์—ฐ์‚ฐ์ด ๋ฐ˜๋ณต๋˜์–ด๋„ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋ฏ€๋กœ, ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ๋ชจ๋‘ O(log n) ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋ณด์žฅํ•œ๋‹ค.

2. ํšจ์œจ์  ํƒ์ƒ‰

ํ•ญ์ƒ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋ฏ€๋กœ ํƒ์ƒ‰ ์—ฐ์‚ฐ์ด ๋งค์šฐ ํšจ์œจ์ ์ด๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋”๋ผ๋„ ์„ฑ๋Šฅ์ด ๊ธ‰๊ฒฉํžˆ ๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.