[์ž๋ฃŒ๊ตฌ์กฐ] AVL ํŠธ๋ฆฌ ํŠน์ง• ๋ฐ ๋กœํ…Œ์ด์…˜ ๊ธฐ์ค€ ์—์„œ AVL ํŠธ๋ฆฌ์˜ ํŠน์ง• ๋ฐ ํšŒ์ „์˜ 4๊ฐ€์ง€ ์ผ€์ด์Šค๋“ค์— ๋Œ€ํ•ด์„œ ๋ง์”€๋“œ๋ ธ์—ˆ๋Š”๋ฐ์š”

๋กœํ…Œ์ด์…˜์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ํฌ์ŠคํŒ…์„ ํ•ฉ๋‹ˆ๋‹ค.

AVL ํŠธ๋ฆฌ ํšŒ์ „

์šฐ์„  ์ฒซ ๋ฒˆ์งธ ์ผ€์ด์Šค์˜€๋˜ Left-Left ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Left-Left ์ผ€์ด์Šค๋Š” ๋ถ€๋ชจ๋…ธ๋“œ์™€ pivot ๋…ธ๋“œ๊ฐ€ ๋ชจ๋‘ left heavy ์ธ ์ผ€์ด์Šค์˜€์ฃ . 

์ฆ‰, ์‹ ๊ทœ๋กœ ์–ด๋–ค ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋…ธ๋“œ์™€ pivot ๋…ธ๋“œ์˜ ๊ท ํ˜•๊ฐ’(balance factor)์ด (-)๋ผ๋Š” ์–˜๊ธฐ์ฃ .

์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

figure1. Left-Left ์—์ œ base tree

์ด๋Ÿฐ ํŠธ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…๋‹ˆ๋‹ค. ๊ฐ ๋…ธ๋“œ์˜ ๋ฐ”๊นฅ์ชฝ์— ์”Œ์—ฌ์ง„ ์ˆซ์ž๊ฐ€ ๊ท ํ˜•๊ฐ’(balance factor)์ž…๋‹ˆ๋‹ค.

์ž, ์ด์ œ ์ด ํŠธ๋ฆฌ์— 2๋ฒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

figure2. Left-Left ์˜ˆ์ œ ์‹ ๊ทœ๋…ธ๋“œ ์ถ”๊ฐ€

์ƒˆ๋กญ๊ฒŒ ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๊ฐ€ ๋˜๋ฉด์„œ 5๋ฒˆ ๋…ธ๋“œ์™€ 10๋ฒˆ ๋…ธ๋“œ์˜ ๊ท ํ˜•๊ฐ’์— ๋ณ€๋™์ด ์ƒ๊ธฐ๊ณ  10๋ฒˆ ๋…ธ๋“œ์˜ ๊ท ํ˜•๊ฐ’์ด -2๊ฐ€ ๋˜๋ฉด์„œ AVL ํŠธ๋ฆฌ์˜ ์กฐ๊ฑด์— ์œ„๋ฐฐ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํšŒ์ „์„ ํ•ด์•ผํ•˜๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ(5๋ฒˆ ๋…ธ๋“œ)์™€ pivot ๋…ธ๋“œ(10๋ฒˆ ๋…ธ๋“œ)๊ฐ€ ๋ชจ๋‘ left heavy์ธ ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1ํšŒ์ „์„ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

figure3. Left-Left ์˜ˆ์ œ ๋กœํ…Œ์ด์…˜ํ•˜๊ธฐ

์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „์„ ํ•ด์ฃผ๊ฒŒ๋˜๋ฉด ๋ชจ๋“  ๋…ธ๋“œ์˜ ๊ท ํ˜•๊ฐ’์ด 0์ด ๋˜๋ฉด์„œ AVL ํŠธ๋ฆฌ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋‘ ๋ฒˆ์งธ๋กœ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ํ•ด์•ผํ•˜๋Š” Right-Right ์ผ€์ด์Šค๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Right-Right ์ผ€์ด์Šค๋Š” ๋ถ€๋ชจ๋…ธ๋“œ์™€ pivot ๋…ธ๋“œ๊ฐ€ ๋ชจ๋‘ right heavy ์ธ ์ผ€์ด์Šค์ด์ฃ .

์•„๋ž˜ ๊ทธ๋ฆผ์€ right-right ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

figure4. AVL ํŠธ๋ฆฌ์˜ ์™ผ์ชฝ ํšŒ์ „ (์ถœ์ฒ˜: tutorialspoint.com)

์ตœ์ดˆ์— A, B ๋…ธ๋“œ๊ฐ€ ์žˆ์—ˆ๊ณ  C ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๊ฐ€ ๋˜๋ฉด์„œ right unbalanced ํŠธ๋ฆฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

right-right ์ผ€์ด์Šค์— ํ•ด๋‹นํ•˜๋ฏ€๋กœ ์™ผ์ชฝ์œผ๋กœ 1ํšŒ์ „ ํ•ด์ฃผ๋ฉด balanced ํŠธ๋ฆฌ๊ฐ€ ๋˜์ฃ .

 

์ด์ œ ์„ธ ๋ฒˆ์งธ ์ผ€์ด์Šค์ธ left-right ์ผ€์ด์Šค๋ฅผ ํ•œ๋ฒˆ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

left-right ์ผ€์ด์Šค๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ์™€ pivot ๋…ธ๋“œ์˜ ๊ท ํ˜•๊ฐ’์ด ๊ฐ๊ฐ right-heavy, left-heavy, ์ธ ๊ฒฝ์šฐ๋ผ๊ณ  ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ง์€ ๊ฒฐ๊ตญ ์–ด๋–ค ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๋ผ๊ณ  ์ดํ•ดํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด์‹œ๋ฉด ์ดํ•ด๊ฐ€ ๋” ๋น ๋ฅผ ๊ฒ๋‹ˆ๋‹ค.

figure5. left-right ์ผ€์ด์Šค

์ตœ์ดˆ์— C์™€ A ๋…ธ๋“œ๋งŒ ์žˆ์—ˆ๋Š”๋ฐ B ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด A๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ฒ ์ฃ . ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋ง์ด์ฃ .

figure6. ์™ผ์ชฝ ํšŒ์ „

left-right ์ผ€์ด์Šค๋ผ๋ฉด ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ํ–ˆ๋‹ค๊ฐ€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „์„ ์‹œ์ผœ๋ด…๋‹ˆ๋‹ค.

figure7. ์™ผ์ชฝ ํšŒ์ „์˜ ๊ฒฐ๊ณผ

์™ผ์ชฝ์œผ๋กœ ํšŒ์ „์„ ์‹œํ‚ค๋ฉด ์œ„ ๊ทธ๋ฆผ ์ฒ˜๋Ÿผ ๋ฉ๋‹ˆ๋‹ค. ์–ด๋ž? ์–ด๋””์„œ ๋ณธ ๊ทธ๋ฆผ์ด๋„ค์š”?

๋งž์Šต๋‹ˆ๋‹ค. ์ œ์ผ ์ฒ˜์Œ์— ๋ดค๋˜ left-left ์ผ€์ด์Šค์™€ ๋˜‘๊ฐ™์•„ ์กŒ์Šต๋‹ˆ๋‹ค.

left-left ์ผ€์ด์Šค๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „์„ ์‹œ์ผœ์•ผ๊ฒ ์ฃ ?

figure8. ์˜ค๋ฅธ์ชฝ ํšŒ์ „
figure9. ๊ท ํ˜• ํŠธ๋ฆฌ

์ด์ œ ๊ท ํ˜•์ด ๋ชจ๋‘ ๋งž์ถฐ์กŒ์Šต๋‹ˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ right-left ์ผ€์ด์Šค๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” left-right ์ผ€์ด์Šค์™€ ๋ฐ˜๋Œ€๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

left-right ์ผ€์ด์Šค๊ฐ€ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ์ผ€์ด์Šค์˜€์œผ๋‹ˆ,

right-left ์ผ€์ด์Šค๋Š” ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ์ผ€์ด์Šค๊ฒ ์ฃ .

๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ง์€ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ pivot ๋…ธ๋“œ์˜ ๊ท ํ˜•๊ฐ’์ด ๊ฐ๊ฐ left-heavy, right-heavy๋ผ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ์œผ๋กœ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

figure10. right-left ์ผ€์ด์Šค

A, C ๋…ธ๋“œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ B ๋…ธ๋“œ๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. C ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ์ถ”๊ฐ€๊ฐ€ ๋˜์ฃ .

A๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ(C๊ฐ€ ๋ฃจํŠธ๋…ธ๋“œ์ธ)์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๊ฐ€ ๋์Šต๋‹ˆ๋‹ค.

figure11. ์˜ค๋ฅธ์ชฝ ํšŒ์ „

์ด๋Ÿฐ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋จผ์ € ํšŒ์ „์„ ํ•ด์ค๋‹ˆ๋‹ค.

figure12. ์˜ค๋ฅธ์ชฝ ํšŒ์ „ ๊ฒฐ๊ณผ

๊ทธ๋Ÿฌ๋ฉด?? ๋‘ ๋ฒˆ์งธ ์ผ€์ด์Šค์ธ right-right ์ผ€์ด์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „์‹œ์ผœ์ฃผ๋ฉด ๋˜๊ฒ ์ฃ ?

figure13. ์™ผ์ชฝ ํšŒ์ „
figure14. ๊ท ํ˜• ํŠธ๋ฆฌ

์ž, ์ด๋ ‡๊ฒŒ ๋งˆ์ง€๋ง‰ ๋„ค ๋ฒˆ์งธ ์ผ€์ด์Šค๋„ ๊ท ํ˜• ํŠธ๋ฆฌ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

AVL ํŠธ๋ฆฌ์˜ 4๊ฐ€์ง€ ํšŒ์ „ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…์„ ํ•ด๋“œ๋ ธ๋Š”๋ฐ์š”,

์ดํ•ด๊ฐ€ ์ž˜ ๋˜์…จ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

์ด์ƒ์œผ๋กœ AVL ํŠธ๋ฆฌ์˜ ๋กœํ…Œ์ด์…˜๋ฒ•์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์„ ๋งˆ์น˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์˜ค๋Š˜๋„ ์ฆํ”„ํ•˜์„ธ์š”~

 

 

Note: left-left ์ผ€์ด์Šค๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ผ€์ด์Šค๋“ค์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€๋Š” tutorialspoint.com ์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.