Skip to content

Latest commit

ย 

History

History
103 lines (63 loc) ยท 4.02 KB

AVLTree.md

File metadata and controls

103 lines (63 loc) ยท 4.02 KB

AVLํŠธ๋ฆฌ (AVL Tree)

written by sohyeon, hyemin ๐Ÿ’ก


1. AVLํŠธ๋ฆฌ๋ž€?

AVLํŠธ๋ฆฌ๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด ๊ท ํ˜•์žก์ธ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์ด๋‹ค.
์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ œ์–ดํ•ด ์ „์ฒด ํŠธ๋ฆฌ๊ฐ€ ์–ด๋Š ํ•œ์ชฝ์œผ๋กœ ๋Š˜์–ด์ง€์ง€ ์•Š๋„๋ก ํ•œ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ์ผ์ข…์ด๋‹ค.
ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ h์ผ ๋•Œ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ๊ณ„์‚ฐ๋ณต์žก์„ฑ์€ O(h)์ด๊ธฐ ๋•Œ๋ฌธ์—
๊ท ํ˜•๋œ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด h๋ฅผ ์ค„์ด๊ณ ์ž ํ•˜๋Š” ๋ฐœ์ƒ์—์„œ ๋น„๋กฏ๋์Šต๋‹ˆ๋‹ค.

๋ฃจํŠธ ๋…ธ๋“œ์˜ ์ขŒ์ธก ์„œ๋ธŒ๋…ธ๋“œ์™€ ์šฐ์ธก ์„œ๋ธŒ๋…ธ๋“œ์˜ ๋†’์ด ์ฐจ์ด๊ฐ€ 1๋ณด๋‹ค ํฌ์ง€ ์•Š์€ ํ˜•ํƒœ์ด๋‹ค.

1-1. ๊ท ํ˜•๊ณ„์ˆ˜(BF, Balance Factor)

BalanceFactor = height(left subtree) - height(right subtree)

์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด์—์„œ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ๋บ€ ๊ฒƒ์ด๋‹ค.
๋‘ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ์žŽ์ƒˆ๋…ธ๋“œ๋ผ๋ฉด BF๋Š” 0์ด๋‹ค(empty tree์˜ BF๋Š” -1๋กœ ์ •์˜).
BF๋Š” ์ •์ˆ˜ ๋ฒ”์œ„ [-1, + 1]์ธ๋ฐ ๋…ธ๋“œ ์‚ฝ์ž… ์ดํ›„์— ๊ทธ๋ž˜ํ”„์˜ ๊ท ํ˜• ๊ณ„์ˆ˜๊ฐ€ -1๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ +1๋ณด๋‹ค ํด ์ˆ˜ ์žˆ๋‹ค.
์ด ๊ฒฝ์šฐ ํšŒ์ „์„ ํ†ตํ•ด ๊ท ํ˜•์„ ๋งž์ถฐ์ค„ ์ˆ˜ ์žˆ๋‹ค.

2. ํšŒ์ „ (Rotation)

์‚ฝ์ž…์œผ๋กœ ์ธํ–‰ ๋ถˆ๊ท ํ˜•ํ•ด์ง„ ๊ทธ๋ž˜ํ”„์˜ ๊ท ํ˜•์„ ๋งž์ถ˜๋‹ค.

2-1. Single Rotation

single rotation์€ rotation์„ ํ•œ ์ฐจ๋ก€ ์ˆ˜ํ–‰ํ•ด BF๊ฐ€ 0์ธ ๊ท ํ˜•์žกํžŒ ๊ทธ๋ž˜ํ”„๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
Single Rotation์€ ํšŒ์ „ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค.

  • Single Left Rotation
  • Single Right Rotation

์‹คํ–‰ ๊ธฐ์ค€

์‚ฝ์ž… ์—ฐ์‚ฐ์˜ single rotation์€ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ์‹ค์‹œ๋œ๋‹ค.

X: BF์˜ ์ ˆ๋Œ€๊ฐ’์ด 2 ์ด์ƒ์ด๋ฉด์„œ ์ƒˆ ๋…ธ๋“œ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์กฐ์ƒ ๋…ธ๋“œ
Y: ์ž์‹๋…ธ๋“œ, BF ์ ˆ๋Œ€๊ฐ’์ด 1 ์ดํ•˜์ธ ๋…ธ๋“œ

  • Y๊ฐ€ X์˜ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ, Y์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์ƒˆ ๋…ธ๋“œ๊ฐ€ ์‚ฝ์ž…๋œ ์ƒํƒœ : Y๋ฅผ ๊ธฐ์ค€์œผ๋กœ right rotation
  • Y๊ฐ€ X์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ, Y์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์ƒˆ ๋…ธ๋“œ๊ฐ€ ์‚ฝ์ž…๋œ ์ƒํƒœ : Y๋ฅผ ๊ธฐ์ค€์œผ๋กœ left rotation

Single Right Rotation ์˜ˆ์‹œ

์œ„์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด 'BF๊ฐ€ 2 ์ด์ƒ, 2 ์ดํ•˜์ผ ๋•Œ rotation์„ ์‹ค์‹œํ•œ๋‹ค'๋Š” ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•œ๋‹ค.
X์˜ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ์ธ Y๋ฅผ ๊ธฐ์ค€์œผ๋กœ single rotation์„ ์‹ค์‹œํ•œ๋‹ค.
Y๋ฅผ ์ƒˆ๋กœ์šด ๋ฃจํŠธ๋…ธ๋“œ๋กœ ๋งŒ๋“ค๊ณ  T1๋งŒ h+1์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ h์ธ ์ ์„ ๊ฐ์•ˆํ•˜๋ฉด
rotation ์‹ค์‹œ ํ›„์˜ X, Y์˜ BF๋Š” ๊ฐ๊ฐ 0, 0์ด ๋˜์–ด ๊ท ํ˜• ํŠธ๋ฆฌ๋ฅผ ์ด๋ฃฌ๋‹ค.

2-2. Double Rotation

rotation ํ•œ ์ฐจ๋ก€๋งŒ์œผ๋กœ ์›ํ•˜๋Š” ์‚ฝ์ž… ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์ง€ ๋ชปํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค.
์ด ๊ฒฝ์šฐ ๋‘๋ฒˆ์˜ rotation์„ ์ˆ˜ํ–‰ํ•ด ๊ท ํ˜•์„ ๋งž์ถ˜๋‹ค.

single rotation๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

  • Double Left Rotation
  • Double Right Rotation

์‹คํ–‰๊ธฐ์ค€

์‚ฝ์ž… ์—ฐ์‚ฐ์˜ double rotation์€ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ์‹ค์‹œ๋œ๋‹ค.

X: BF์˜ ์ ˆ๋Œ€๊ฐ’์ด 2 ์ด์ƒ์ด๋ฉด์„œ ์ƒˆ ๋…ธ๋“œ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์กฐ์ƒ ๋…ธ๋“œ
Y: X์˜ ์ž์‹๋…ธ๋“œ์ด๋ฉด์„œ BF ์ ˆ๋Œ€๊ฐ’์ด 1์ดํ•˜

  • Y๊ฐ€ X์˜ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ, Y์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์ƒˆ ๋…ธ๋“œ๊ฐ€ ์‚ฝ์ž…๋œ ๊ฒฝ์šฐ
  • Y๊ฐ€ X์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ, Y์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์ƒˆ ๋…ธ๋“œ๊ฐ€ ์‚ฝ์ž…๋œ ๊ฒฝ์šฐ

์œ„์˜ ๊ทธ๋ฆผ ์˜ˆ์‹œ๋Š” X, Y, Z์˜ BF๊ฐ€ ๊ฐ๊ฐ 2, -1, 1์ด ๋œ๋‹ค.
๋”ฐ๋ผ์„œ X๋ฅผ ๋ฃจํŠธ๋…ธ๋“œ๋กœ ํ•˜๋Š” ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ๊ท ํ˜•์„ ๋งž์ถฐ์•ผ๋  ๋Œ€์ƒ์ด ๋œ๋‹ค.

Double Right Lotation ์˜ˆ์‹œ

  • ์ฒซ๋ฒˆ์งธ : Z๋ฅผ ์ค‘์‹ฌ์œผ๋กœ left rotation ์ˆ˜ํ–‰ (T1๋ฅผ ์žก์•„ ๋‹น๊ฒจ ๋‚ด๋ฆฌ๋Š” ๊ณผ์ •)
  • ๋‘๋ฒˆ์งธ : Z๋ฅผ ์ค‘์‹ฌ์œผ๋กœ right rotation ์ˆ˜ํ–‰ (T4๋ฅผ ์žก์•„ ๋‹น๊ฒจ ๋‚ด๋ฆฌ๋Š” ๊ณผ์ •)

์œ„ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด BF๊ฐ€ ๊ฐ๊ฐ -1, 0, 0์ด ๋˜์–ด์„œ ๊ท ํ˜•์„ ์ด๋ฃจ๊ฒŒ ๋œ๋‹ค.

3. ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ