[์๋ฃ๊ตฌ์กฐ] AVL ํธ๋ฆฌ ํน์ง ๋ฐ ๋กํ ์ด์ ๊ธฐ์ค ์์ AVL ํธ๋ฆฌ์ ํน์ง ๋ฐ ํ์ ์ 4๊ฐ์ง ์ผ์ด์ค๋ค์ ๋ํด์ ๋ง์๋๋ ธ์๋๋ฐ์
๋กํ ์ด์ ์ ์ด๋ป๊ฒ ํ๋์ง์ ๋ํด์ ์ข ๋ ์์ธํ ์ค๋ช ๋๋ฆฌ๊ธฐ ์ํด ์ถ๊ฐ ํฌ์คํ ์ ํฉ๋๋ค.
AVL ํธ๋ฆฌ ํ์
์ฐ์ ์ฒซ ๋ฒ์งธ ์ผ์ด์ค์๋ Left-Left ์ผ์ด์ค์ ๋ํด์ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Left-Left ์ผ์ด์ค๋ ๋ถ๋ชจ๋ ธ๋์ pivot ๋ ธ๋๊ฐ ๋ชจ๋ left heavy ์ธ ์ผ์ด์ค์์ฃ .
์ฆ, ์ ๊ท๋ก ์ด๋ค ๋ ธ๋๋ฅผ ์ถ๊ฐํ์ ๋ ํด๋น ๋ ธ๋์ ๋ถ๋ชจ๋ ธ๋์ pivot ๋ ธ๋์ ๊ท ํ๊ฐ(balance factor)์ด (-)๋ผ๋ ์๊ธฐ์ฃ .
์๋ ์์ ๋ฅผ ํ๋ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ด๋ฐ ํธ๋ฆฌ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ด ๋๋ค. ๊ฐ ๋ ธ๋์ ๋ฐ๊นฅ์ชฝ์ ์์ฌ์ง ์ซ์๊ฐ ๊ท ํ๊ฐ(balance factor)์ ๋๋ค.
์, ์ด์ ์ด ํธ๋ฆฌ์ 2๋ฒ ๋ ธ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์๋กญ๊ฒ ๋ ธ๋๊ฐ ์ถ๊ฐ๊ฐ ๋๋ฉด์ 5๋ฒ ๋ ธ๋์ 10๋ฒ ๋ ธ๋์ ๊ท ํ๊ฐ์ ๋ณ๋์ด ์๊ธฐ๊ณ 10๋ฒ ๋ ธ๋์ ๊ท ํ๊ฐ์ด -2๊ฐ ๋๋ฉด์ AVL ํธ๋ฆฌ์ ์กฐ๊ฑด์ ์๋ฐฐ๋ฉ๋๋ค. ๋ฐ๋ผ์ ํ์ ์ ํด์ผํ๋๋ฐ ์ด๋ ๊ฒ ์๋ก ์ถ๊ฐํ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋(5๋ฒ ๋ ธ๋)์ pivot ๋ ธ๋(10๋ฒ ๋ ธ๋)๊ฐ ๋ชจ๋ left heavy์ธ ๊ฒฝ์ฐ์๋ ์ค๋ฅธ์ชฝ์ผ๋ก 1ํ์ ์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ค๋ฅธ์ชฝ์ผ๋ก ํ์ ์ ํด์ฃผ๊ฒ๋๋ฉด ๋ชจ๋ ๋ ธ๋์ ๊ท ํ๊ฐ์ด 0์ด ๋๋ฉด์ AVL ํธ๋ฆฌ์ ์กฐ๊ฑด์ ๋ง์กฑํ๊ฒ ๋ฉ๋๋ค.
๋ ๋ฒ์งธ๋ก ์ผ์ชฝ์ผ๋ก ํ์ ํด์ผํ๋ Right-Right ์ผ์ด์ค๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Right-Right ์ผ์ด์ค๋ ๋ถ๋ชจ๋ ธ๋์ pivot ๋ ธ๋๊ฐ ๋ชจ๋ right heavy ์ธ ์ผ์ด์ค์ด์ฃ .
์๋ ๊ทธ๋ฆผ์ right-right ์ผ์ด์ค์ ๋ํด์ ์ผ์ชฝ์ผ๋ก ํ์ ํ๋ ์์ ์ ๋๋ค.
์ต์ด์ A, B ๋ ธ๋๊ฐ ์์๊ณ C ๋ ธ๋๊ฐ ์ถ๊ฐ๊ฐ ๋๋ฉด์ right unbalanced ํธ๋ฆฌ๊ฐ ๋ฉ๋๋ค.
right-right ์ผ์ด์ค์ ํด๋นํ๋ฏ๋ก ์ผ์ชฝ์ผ๋ก 1ํ์ ํด์ฃผ๋ฉด balanced ํธ๋ฆฌ๊ฐ ๋์ฃ .
์ด์ ์ธ ๋ฒ์งธ ์ผ์ด์ค์ธ left-right ์ผ์ด์ค๋ฅผ ํ๋ฒ ๋ณด๊ฒ ์ต๋๋ค.
left-right ์ผ์ด์ค๋ ๋ถ๋ชจ ๋ ธ๋์ pivot ๋ ธ๋์ ๊ท ํ๊ฐ์ด ๊ฐ๊ฐ right-heavy, left-heavy, ์ธ ๊ฒฝ์ฐ๋ผ๊ณ ํ์์ต๋๋ค.
์ด ๋ง์ ๊ฒฐ๊ตญ ์ด๋ค ๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ์๋ก์ด ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ ๊ฒฝ์ฐ๋ผ๊ณ ์ดํดํ์ ๋ ๋ฉ๋๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ณด์๋ฉด ์ดํด๊ฐ ๋ ๋น ๋ฅผ ๊ฒ๋๋ค.
์ต์ด์ C์ A ๋ ธ๋๋ง ์์๋๋ฐ B ๋ ธ๋๊ฐ ์ถ๊ฐ๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด A๋ ธ๋์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ก ๋ค์ด๊ฐ๊ฒ ๋๊ฒ ์ฃ . ์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ง์ด์ฃ .
left-right ์ผ์ด์ค๋ผ๋ฉด ์ผ์ชฝ์ผ๋ก ํ์ ํ๋ค๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ ํ๋ฉด ๋๋ฏ๋ก ์ ๊ทธ๋ฆผ์ฒ๋ผ ์ผ์ชฝ์ผ๋ก ํ์ ์ ์์ผ๋ด ๋๋ค.
์ผ์ชฝ์ผ๋ก ํ์ ์ ์ํค๋ฉด ์ ๊ทธ๋ฆผ ์ฒ๋ผ ๋ฉ๋๋ค. ์ด๋? ์ด๋์ ๋ณธ ๊ทธ๋ฆผ์ด๋ค์?
๋ง์ต๋๋ค. ์ ์ผ ์ฒ์์ ๋ดค๋ left-left ์ผ์ด์ค์ ๋๊ฐ์ ์ก์ต๋๋ค.
left-left ์ผ์ด์ค๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ ์ ์์ผ์ผ๊ฒ ์ฃ ?
์ด์ ๊ท ํ์ด ๋ชจ๋ ๋ง์ถฐ์ก์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก right-left ์ผ์ด์ค๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ๋จํ๊ฒ๋ left-right ์ผ์ด์ค์ ๋ฐ๋๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
left-right ์ผ์ด์ค๊ฐ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ์๋ก์ด ๋ ธ๋๊ฐ ์ถ๊ฐ๋๋ ์ผ์ด์ค์์ผ๋,
right-left ์ผ์ด์ค๋ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์๋ก์ด ๋ ธ๋๊ฐ ์ถ๊ฐ๋๋ ์ผ์ด์ค๊ฒ ์ฃ .
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ง์ ๋ถ๋ชจ ๋ ธ๋์ pivot ๋ ธ๋์ ๊ท ํ๊ฐ์ด ๊ฐ๊ฐ left-heavy, right-heavy๋ผ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
๊ทธ๋ฆผ์ผ๋ก ํ๋ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
A, C ๋ ธ๋๊ฐ ์์๋๋ฐ B ๋ ธ๋๊ฐ ์๋กญ๊ฒ ์ถ๊ฐ๊ฐ ๋ฉ๋๋ค. C ๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ก ์ถ๊ฐ๊ฐ ๋์ฃ .
A๋ ธ๋์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ(C๊ฐ ๋ฃจํธ๋ ธ๋์ธ)์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์๋ก์ด ๋ ธ๋๊ฐ ์ถ๊ฐ๊ฐ ๋์ต๋๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ๋จผ์ ํ์ ์ ํด์ค๋๋ค.
๊ทธ๋ฌ๋ฉด?? ๋ ๋ฒ์งธ ์ผ์ด์ค์ธ right-right ์ผ์ด์ค๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ผ ์ผ์ชฝ์ผ๋ก ํ์ ์์ผ์ฃผ๋ฉด ๋๊ฒ ์ฃ ?
์, ์ด๋ ๊ฒ ๋ง์ง๋ง ๋ค ๋ฒ์งธ ์ผ์ด์ค๋ ๊ท ํ ํธ๋ฆฌ๊ฐ ๋์์ต๋๋ค.
AVL ํธ๋ฆฌ์ 4๊ฐ์ง ํ์ ๋ฐฉ๋ฒ์ ๋ํด์ ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ์ ํด๋๋ ธ๋๋ฐ์,
์ดํด๊ฐ ์ ๋์ จ๊ธธ ๋ฐ๋๋๋ค.
์ด์์ผ๋ก AVL ํธ๋ฆฌ์ ๋กํ ์ด์ ๋ฒ์ ๋ํ ํฌ์คํ ์ ๋ง์น๋๋ก ํ๊ฒ ์ต๋๋ค.
์ค๋๋ ์ฆํํ์ธ์~
Note: left-left ์ผ์ด์ค๋ฅผ ์ ์ธํ ๋๋จธ์ง ์ผ์ด์ค๋ค์ ๋ํ ์ด๋ฏธ์ง๋ tutorialspoint.com ์์ ๊ฐ์ ธ์์ต๋๋ค.
'๐ป Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ์ํ์ฐธ์กฐ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ (How to avoid circular reference) (0) | 2020.12.11 |
---|---|
์คํ๋ง ์์กด์ฑ ์ฃผ์ (DI) (0) | 2020.12.10 |
[์๋ฃ๊ตฌ์กฐ] AVL ํธ๋ฆฌ ํน์ง ๋ฐ ๋กํ ์ด์ ๊ธฐ์ค (1) | 2020.11.29 |
[AWS] ES์ ์ฐ๋๋ ํค๋ฐ๋ ์๋ฌ (Unable to find saved objects) (0) | 2020.11.28 |
[5๋ถ์ฝ๋ฉ] ์คํ๋ง ๋ถํธ์ ์ค์จ๊ฑฐ v3.x ์ฐ๋ํ๊ธฐ (0) | 2020.11.26 |