Computer Science/Data Structure

[์ž๋ฃŒ๊ตฌ์กฐ] AVLํŠธ๋ฆฌ (AVL Tree)

minzhen 2022. 5. 3. 21:31

์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ๋Š” ์ €์žฅ๊ณผ ๊ฒ€์ƒ‰์— ํ‰๊ท  Θ(log n)์‹œ๊ฐ„์ด ์†Œ์š”๋˜์ง€๋งŒ ์šด์ด ๋‚˜์˜๋ฉด ํŠธ๋ฆฌ์˜ ๋ชจ์–‘์ด ๊ท ํ˜•์„ ์ž˜ ์ด๋ฃจ์ง€ ๋ชปํ•œ๋‹ค. ๊ท ํ˜•์ด ๋งŽ์ด ๊นจ์ง€๋ฉด Θ(n)์— ๊ทผ์ ‘ํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณ ์•ˆํ•ด ๋‚ธ ๊ฒƒ์ด **๊ท ํ˜•์žกํžŒ ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ(Balanced Binary Search Tree)**์ด๋‹ค. ๊ท ํ˜•์žกํžŒ ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์ด์ง„ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์ด ์ž˜ ๋งž๋„๋ก ์œ ์ง€ํ•œ๋‹ค. ๊ท ํ˜•์žกํžŒ ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ๋กœ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์€ AVLํŠธ๋ฆฌ์™€ ๋ ˆ๋“œ๋ธ”๋ž™ํŠธ๋ฆฌ๋‹ค.

 

AVL Tree

Adelson-Velsky and Landis Tree


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

์ด์ง„ ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ํ•ญ์ƒ O(log n)์ด๋ฉด, ํƒ์ƒ‰ ํŠธ๋ฆฌ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด O(log n)์˜ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

Worst-case์˜ ๋†’์ด๊ฐ€ O(log n)์ธ ํŠธ๋ฆฌ๋ฅผ balanced tree๋ผ๊ณ  ํ•œ๋‹ค. balanced tree์˜ ์˜ˆ๋กœ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ์ผ์ข…์ธ AVL Tree๊ฐ€ ์žˆ๋‹ค.

 

1. AVL Tree

  • ์ด์ง„ํŠธ๋ฆฌ
  • ๋งŒ์•ฝ T๊ฐ€ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋กœ TL๊ณผ TR์„ ๊ฐ€์ง„ ๋น„์–ด์žˆ์ง€ ์•Š์€ ์ด์ง„ ํŠธ๋ฆฌ๋ผ๋ฉด, T๋Š” AVLํŠธ๋ฆฌ์ด๋‹ค.
    • TL๊ณผ TR์€ AVL ํŠธ๋ฆฌ์ด๋ฉฐ,
    • hL๊ณผ hR์€ ๊ฐ๊ฐ TL๊ณผ TR์˜ ๋†’์ด์ผ ๋–„, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค.

 

2. AVL Search Tree

: AVL Search Tree๋Š” AVLํŠธ๋ฆฌ์ด๊ธฐ๋„ ํ•œ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์ด๋‹ค.

AVL ํŠธ๋ฆฌ : (a), (b) / AVL search tree : (b)

 

                                                

 

AVL Tree์˜ ํŠน์ง•

  • ๋…ธ๋“œ๊ฐ€ n๊ฐœ์ธ AVL ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” O(log n)์ด๋‹ค.
  • ๋ชจ๋“  n์˜ ๊ฐ’์— ๋Œ€ํ•˜์—ฌ n ≥ 0์ด๋ฉด AVL ํŠธ๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • ๋…ธ๋“œ๊ฐ€ n๊ฐœ์ธ AVL Search Tree๋Š” O(height)=O(log n)์‹œ๊ฐ„์— ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋…ธ๋“œ๊ฐ€ n๊ฐœ์ธ AVL Search Tree์— ์ƒˆ ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ n+1๊ฐœ ๋…ธ๋“œ์˜ AVL ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์ด ๋•Œ์˜ ์‚ฝ์ž…์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ O(log n)์ด๋‹ค.
  • n>0, ๋…ธ๋“œ๊ฐ€ n๊ฐœ์ธ AVL Search Tree์—์„œ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋…ธ๋“œ๊ฐ€ n-1๊ฐœ์ธ AVL ํŠธ๋ฆฌ๊ฐ€ ๋˜๊ณ , ์‚ญ์ œ์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ O(log n)์ด๋‹ค.

 

 

Balance Factor

๊ท ํ˜• ์ธ์ˆ˜

  • AVL tree๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ linked representation์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•œ๋‹ค.
  • ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ท ํ˜•์ธ์ˆ˜(**balance factor)**๊ฐ€ ๊ฐ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ๋‹ค.
  • ๋…ธ๋“œ x์˜ ๊ท ํ˜• ์ธ์ˆ˜์ธ **bf(x)**๋Š” height(x→leftChild) – **height(x→rightChild)**๋กœ ์ •์˜๋œ๋‹ค.
  • AVL ํŠธ๋ฆฌ์—์„œ ๊ฐ ๋…ธ๋“œ์˜ ๊ท ํ˜• ๊ณ„์ˆ˜๋Š” -1์ด๋‚˜ 0์ด๋‚˜ 1์ด์–ด์•ผ ํ•œ๋‹ค.

AVL Search Tree with Balance Factor

 

 

AVL Search Tree์˜ ํ™œ์šฉ


๐Ÿ“Œ ํƒ์ƒ‰


์ผ๋ฐ˜ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ํƒ์ƒ‰ ์—ฐ์‚ฐ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(log n)

 

๐Ÿ“Œ ์‚ฝ์ž…


AVL ํƒ์ƒ‰ ํŠธ๋ฆฌ์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋‹ค๋ณด๋ฉด ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์ด ๋งž์ง€ ์•Š์•„ AVLํŠธ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋ ‡๋“ฏ ํŠธ๋ฆฌ๊ฐ€ ๋ถˆ๊ท ํ˜• ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ๊ท ํ˜•์„ ํšŒ๋ณตํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋ฆฌ๋ฅผ ์กฐ์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ด ์กฐ์ •์„ ํšŒ์ „(rotation)์ด๋ผ๊ณ  ํ•œ๋‹ค.

Inserting into an AVL Search Tree

 

 Imbalance Types


      ๋ถˆ๊ท ํ˜• ์œ ํ˜•. ์‚ฝ์ž… ํ›„, ๋…ธ๋“œ A์˜ ๊ท ํ˜• ์ธ์ˆ˜๊ฐ€ -2 ๋˜๋Š” 2์ผ ๋•Œ, ๋…ธ๋“œ A๋Š” ๋‹ค์Œ ๋„ค ๊ฐ€์ง€ ๋ถˆ๊ท ํ˜• ์œ ํ˜• ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

      1) LL : ์ƒˆ ๋…ธ๋“œ๊ฐ€ A์˜ ์™ผ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์˜ ์™ผ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์— ์žˆ๋‹ค.

      2) LR : ์ƒˆ ๋…ธ๋“œ๊ฐ€ A์˜ ์™ผ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์˜ ์˜ค๋ฅธ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์— ์žˆ๋‹ค.

      3) RR : ์ƒˆ ๋…ธ๋“œ๊ฐ€ A์˜ ์˜ค๋ฅธ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์˜ ์˜ค๋ฅธ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์— ์žˆ๋‹ค.

      4) RL : ์ƒˆ ๋…ธ๋“œ๊ฐ€ A์˜ ์˜ค๋ฅธ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์˜ ์™ผ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์— ์žˆ๋‹ค.

 

๐Ÿ‘‰๐Ÿป (์‚ฝ์ž… ํ›„) ๋ถˆ๊ท ํ˜• AVL ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด LL, RR, LR, RL ํšŒ์ „ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

Rotation


1. Single Rotation

์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์˜ single rotation์€ ๋…ธ๋“œA์™€ B์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ์–ด ์ฃผ๊ณ  ์„œ๋ธŒ ํŠธ๋ฆฌ๋“ค์„ ์ •๋ฆฌํ•˜๋ฉด ๊ท ํ˜• ํŠธ๋ฆฌ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

Single Rotation

1) LL Rotation

๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ์ž์‹๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ๋ถ™์ด๋ฉด ๋œ๋‹ค. ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „์‹œํ‚ค๋Š” ๋ชจ์–‘์ด๋‹ค. ์ž์‹๋…ธ๋“œ์— ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋Š” ๋ฃจํŠธ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์—ฐ๊ฒฐ์‹œํ‚จ๋‹ค.

2) RR Rotation

๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ์ž์‹๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ๋ถ™์ด๋ฉด ๋œ๋‹ค. ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „์‹œํ‚ค๋Š” ๋ชจ์–‘์ด๋‹ค. ์ž์‹๋…ธ๋“œ์— ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ๋งŒ๋“ ๋‹ค.

 

2. Double Rotation

์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด, Single Rotation์„ ๋‘ ๋ฒˆ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

1) LR Rotation

    : ๋ถ€๋ถ„์  RRํšŒ์ „์— ์ด์–ด์„œ LLํšŒ์ „

 

2. RL Rotation

    : ๋ถ€๋ถ„์  LLํšŒ์ „์— ์ด์–ด์„œ RRํšŒ์ „

 

๐Ÿ“Œ ์‚ญ์ œ


  • ์‚ฝ์ž…๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•ด๋„ ๋ถˆ๊ท ํ˜•์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ญ์ œ๋กœ ์ธํ•œ ๊ท ํ˜• ์žฌ์กฐ์ •์—๋„ ํšŒ์ „(Rotation)์ด ํ•„์š”ํ•˜๋‹ค
  • ์‚ญ์ œ๋กœ ์ธํ•œ ๋ถˆ๊ท ํ˜•์€ R0, R1, R-1, L0, L1, L-1๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.
  • R1 Rotation

  • R0 Rotation

  • R-1 Rotation

 

 

์ฐธ๊ณ ์ž๋ฃŒ