AVL Tree

์–ด๋–ค ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋”๋ผ๋„ ์™ผ์ชฝ์ž์‹์˜ ๊นŠ์ด์™€ ์˜ค๋ฅธ์ชฝ ์ž์‹์˜ ๊นŠ์ด ์ฐจ์ด๊ฐ€ 1์„ ๋„˜์ง€ ์•Š๋Š” ํŠธ๋ฆฌ

BST (์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‘” Tree.

์‚ฝ์ž…, ์‚ญ์ œ, ํƒ์ƒ‰์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(log n)

์šฉ์–ด ๊ฐœ๋…

  • ๊ท ํ˜•์น˜ (Balance factor) : ์ž์‹๋…ธ๋“œ์˜ ๊นŠ์ด ์ฐจ์ด ( ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด โ€“ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด ) BF๋Š” -1, 0, 1๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ ์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ๋‹ค๋ฉด, ๊ทธ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์€ ๊นจ์ง„๊ฒƒ๋‹ค.

ํŠน์ง•

  • BST์˜ ๋ชจ๋“  ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค.

  • ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์ž์‹์˜ ๊นŠ์ด์™€ ์˜ค๋ฅธ์ชฝ ์ž์‹์˜ ๊นŠ์ด ์ฐจ์ด๊ฐ€ 1์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

  • AVL Tree๊ฐ€ Red Black Tree๋ณด๋‹ค ๋” ์—„๊ฒฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋น ๋ฅธ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‚˜ ์‚ฝ์ž… / ์‚ญ์ œ๊ฐ€ RB Tree์— ๋น„ํ•ด ๋Š๋ฆฌ๋‹ค.

  • RB Tree๋Š” Red/Black์„ ํ‘œํ˜„ํ•  ๋•Œ 1 or 0 1๋น„ํŠธ๋งŒ ์žˆ์–ด๋„ ๋˜๋‚˜ AVL Tree๋Š” ๊นŠ์ด๋ฅผ ์ €์žฅํ•  intํƒ€์ž…์˜ ์ €์žฅ์ด ํ•„์š”ํ•˜๋‹ค.

์‚ฌ์šฉ ์˜ˆ

  • ๋” ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•œ DB์— ์‚ฌ์šฉ

๊ตฌํ˜„

  • Insert ( ์‚ฝ์ž… )

BST์˜ ์ผ๋ฐ˜ ์‚ฝ์ž… ๊ทœ์น™์— ๋งž๊ฒŒ ์‚ฝ์ž… ํ›„, ์ฒซ๋ฒˆ์งธ๋กœ ๋ถˆ๊ท ํ˜•ํ•œ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค.
์ด๋•Œ ๋ถˆ๊ท ํ˜•ํ•œ ๋…ธ๋“œ๋ฅผ z๋ผ๊ณ  ํ• ๋•Œ, ์ž์‹๋…ธ๋“œ๊ฐ€ y, ์†์ž ๋…ธ๋“œ๋ฅผ x๋ผ ํ•œ๋‹ค.

ํ•ด๋‹นํ•˜๋Š” case์— ๋”ฐ๋ผ z๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ€๋ถ„ํŠธ๋ฆฌ๋ฅผ ํšŒ์ „์„ ํ†ตํ•ด ์žฌ๋ฐฐ์—ด ์‹œ์ผœ์ค€๋‹ค.(rotation , restructuring)

๐Ÿ”ด case 1. y๋Š” z์˜ ์™ผ์ชฝ ์ž์‹, x๋Š” y์˜ ์™ผ์ชฝ ์ž์‹ ( left left )

  โžก z๋ฅผ ๊ธฐ์ค€์œผ๋กœ right-rotate ์‹œ์ผœ์ค€๋‹ค.

๐Ÿ”ด case 2. y๋Š” z์˜ ์™ผ์ชฝ ์ž์‹, x๋Š” y์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ( left right )

  โžก y๋ฅผ ๊ธฐ์ค€์œผ๋กœ left-rotate ์‹œ์ผœ์ค€ ํ›„, z๋ฅผ ๊ธฐ์ค€์œผ๋กœ right-rotate ์‹œ์ผœ์ค€๋‹ค.

๐Ÿ”ด case 3. y๋Š” z์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹, x๋Š” y์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ( right right )

   โžก z๋ฅผ ๊ธฐ์ค€์œผ๋กœ left-rotate ์‹œ์ผœ์ค€๋‹ค.

๐Ÿ”ด case 4. y๋Š” z์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹, x๋Š” y์˜ ์™ผ์ชฝ ์ž์‹ ( right left )

    โžก y๋ฅผ ๊ธฐ์ค€์œผ๋กœ right-rotate ์‹œ์ผœ์ค€ ํ›„, z๋ฅผ ๊ธฐ์ค€์œผ๋กœ left-rotate ์‹œ์ผœ์ค€๋‹ค.

  • Delete ( ์‚ญ์ œ )

BST์˜ ์ผ๋ฐ˜ ์‚ฝ์ž… ๊ทœ์น™์— ๋งž๊ฒŒ ์‚ญ์ œ ํ›„, ์ฒซ๋ฒˆ์งธ๋กœ ๋ถˆ๊ท ํ˜•ํ•œ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค.
์ด๋•Œ ๋ถˆ๊ท ํ˜•ํ•œ ๋…ธ๋“œ๋ฅผ z๋ผ๊ณ  ํ• ๋•Œ, z์˜ ์ž์‹๋…ธ๋“œ์ค‘ ๊นŠ์ด๊ฐ€ ํฐ ์ž์‹ ๋…ธ๋“œ๋ฅผ y, y์˜ ์ž์‹๋…ธ๋“œ์ค‘ ๊นŠ์ด๊ฐ€ ํฐ ์ž์‹ ๋…ธ๋“œ๋ฅผ x๋ผ ํ•˜์ž.

ํ•ด๋‹นํ•˜๋Š” case์— ๋”ฐ๋ผ z๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ€๋ถ„ํŠธ๋ฆฌ๋ฅผ ํšŒ์ „์„ ํ†ตํ•ด ์žฌ๋ฐฐ์—ด ์‹œ์ผœ์ค€๋‹ค.(rotation , restructuring)
์žฌ๋ฐฐ์—ด ๊ณผ์ •์€ ์‚ฝ์ž…๊ณผ ๋™์ผํ•˜๋‹ค.

๐Ÿ”ด case 1. y๋Š” z์˜ ์™ผ์ชฝ ์ž์‹, x๋Š” y์˜ ์™ผ์ชฝ ์ž์‹ ( left left )

  โžก z๋ฅผ ๊ธฐ์ค€์œผ๋กœ right-rotate ์‹œ์ผœ์ค€๋‹ค.

๐Ÿ”ด case 2. y๋Š” z์˜ ์™ผ์ชฝ ์ž์‹, x๋Š” y์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ( left right )

  โžก y๋ฅผ ๊ธฐ์ค€์œผ๋กœ left-rotate ์‹œ์ผœ์ค€ ํ›„, z๋ฅผ ๊ธฐ์ค€์œผ๋กœ right-rotate ์‹œ์ผœ์ค€๋‹ค.

๐Ÿ”ด case 3. y๋Š” z์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹, x๋Š” y์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ( right right )

   โžก z๋ฅผ ๊ธฐ์ค€์œผ๋กœ left-rotate ์‹œ์ผœ์ค€๋‹ค.

๐Ÿ”ด case 4. y๋Š” z์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹, x๋Š” y์˜ ์™ผ์ชฝ ์ž์‹ ( right left )

    โžก y๋ฅผ ๊ธฐ์ค€์œผ๋กœ right-rotate ์‹œ์ผœ์ค€ ํ›„, z๋ฅผ ๊ธฐ์ค€์œผ๋กœ left-rotate ์‹œ์ผœ์ค€๋‹ค.

  • Search ( ํƒ์ƒ‰ )

AVL Tree๋„ BST์˜ ์ผ์ข…์ด๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰์˜ ๋ฐฅ๋ฒ•์€ ์ผ๋ฐ˜์ ์ธ Bianry Tree์˜ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•๊ณผ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.

์ฝ”๋“œ ๋ณด๊ธฐ(c++)

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

์ผ๋ฐ˜ BST์˜ skewdํ•œ ๊ฒฝ์šฐ๋ฅผ balancing๊ธฐ๋ฒ•์„ ํ†ตํ•ด balancedํ•œ tree๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฏ€๋กœ ํƒ์ƒ‰๊ณผ์ •์€ ์›ํ•˜๋Š” ๋Œ€๋กœ O(lgn)์ด ๋‚˜์˜จ๋‹ค. ์‚ฝ์ž…์€ ์ผ๋ฐ˜ BST์—์„œ rotate๊ณผ์ •์ด ์ถ”๊ฐ€ ๋˜์—ˆ๋Š” ๋ฐ, rotate๊ณผ์ •์€ ํฌ์ธํ„ฐ๋ณ€์ˆ˜๋ฅผ ๊ตํ™˜ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ O(1)์˜ ์—ฐ์‚ฐ์ด O(lgn)๋ฒˆ ์ˆ˜ํ–‰ ๋˜๋ฏ€๋กœ ์‚ฝ์ž…๋„ O(lgn)์„ ๊ฐ–๋Š”๋‹ค. ์‚ญ์ œ๋„ ์‚ฝ์ž…๊ณผ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ O(lgn)์ด ๋‚˜์˜จ๋‹ค.

Last updated