- Python
- ์๊ณ ๋ฆฌ์ฆ
- ๋นํธ๋งต
- golang
- ์น๋ฆฐ์ด
- ์์ฝ๋
- ํธ๋ฆฌ
- nestjs
- ์นด์นด์ค ์ฝํ
- LCs
- go
- ๋นํธ๋ง์คํน
- ์นด์นด์ค2021
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- js
- ๋ค์ต์คํธ๋ผ
- DP
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ด๋ถํ์
- ์ํฐ๋
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- C++
- DFS
- BFS
- Union-Find
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- ํ๋ฆฌ์จ๋ณด๋ฉ
- ๋ฐฑ์ค
- ์ฌ๊ท
- Today
- Total
Hello Ocean! ๐ผ
[CS/์๋ฃ๊ตฌ์กฐ] ์ด์ง ํ์ ํธ๋ฆฌ (BST) ๋ณธ๋ฌธ
Binary Search Tree(์ด์ง ํ์ ํธ๋ฆฌ)๋?
์ด์ง ํ์ + ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๊ฒฐํฉํ ์๋ฃ๊ตฌ์กฐ์ ์ผ์ข
์ด์ง ํ์์ ํจ์จ์ ์ธ ํ์ ๋ฅ๋ ฅ + ๋น๋ฒํ ์ฝ์ /์ญ์ ๊ฐ๋ฅํ๋๋ก ๊ณ ์
์ด์ง ํ์ ๋ณต์ก๋ : O(logN)
์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ฝ์ /์ญ์ ๋ณต์ก๋ : O(1)
์์ฑ
๊ฐ ๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์๋ ํด๋น ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง ๋ ธ๋๋ค๋ก,
๊ฐ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์๋ ํด๋น ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฐ ๊ฐ์ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์ค๋ณต๋๋ ๋ ธ๋๋ ์์ด์ผ ํ๋ฉฐ, ์ผ์ชฝ ์๋ธํธ๋ฆฌ, ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ๋ํ ์ด์งํ์ํธ๋ฆฌ์ ๋๋ค.
์ํ์์๋ ์ค์์ํ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด, ์ด์งํ์ํธ๋ฆฌ ๋ด์ ๋ชจ๋ ๊ฐ๋ค์ ์ ๋ ฌ๋ ์์ผ๋ก ์ฝ์ ์ ์์ต๋๋ค.
- ์ค์ ์ํ : ์ผ์ชฝ ํ์ ํธ๋ฆฌ -> root -> ์ค๋ฅธ์ชฝ ํ์ํธ๋ฆฌ
์ฐ์ฐ
๊ฒ์ / ์ฝ์ / ์ญ์
์์ฑ / ์ญ์ / isEmpty / ์ํ
- ์ฝ์ O(h)๋ฒ ํ์ ํ ์ฝ์ ํ๊ธด ํ์ง๋ง, ์ฝ์ ์ ๊ณ์ฐ๋ณต์ก๋๋ O(1)์ด๋ผ ๋ฌด์ํ ๋งํ๋ค
- ํญ์ ๋ฆฌํ๋ ธ๋์ ์ฝ์
- ๊ฒ์
- ์๊ฐ ๋ณต์ก๋ : O(h) (ํธ๋ฆฌ์ ๋์ด :h)
- ์ญ์
- ๊ทธ๋ฅ ์ญ์ ํ๋ฉด๋จ
2) ์์๋ ธ๋๊ฐ ํ ๊ฐ์ธ ๊ฒฝ์ฐ - ํด๋น ๋
ธ๋๋ฅผ ์ง์ฐ๊ณ , ํด๋น ๋
ธ๋์ ๋ถ๋ชจ์, ํด๋น ๋
ธ๋์ ์์์ ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋จ
3) ์์๋ ธ๋๊ฐ ๋ ๊ฐ์ธ ๊ฒฝ์ฐ - ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋ ธ๋ (์ผ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ์์ ๊ฐ)
- ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๊ฐ์ฅ ์ผ์ชฝ ๋ ธ๋ (์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ํฐ ๊ฐ)
- ์ค์ ์ํ๋ ๊ฑธ๋ก ์ญ์ ํ ๋ ธ๋๋ฅผ ๋์ฒดํด์ฃผ๋ฉด ๋๋ค.
- ๊ทธ๋ฅ ์ญ์ ํ๋ฉด๋จ
- 1) ์์๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ
ํ๊ณ์
์ด์งํ์ํธ๋ฆฌ ํต์ฌ ์ฐ์ฐ์ธ ํ์/์ฝ์ /์ญ์ ์ ๋ณต์ก๋๋ ๋ชจ๋ O(h) ๋ก, ํธ๋ฆฌ์ ๋์ด์ ๋ฐ๋ผ ์ํ์๊ฐ์ด ๊ฒฐ์ ๋๋ ๊ตฌ์กฐ์ ๋๋ค.
๊ทธ๋์ ๋ชจ๋ ๋ ธ๋๊ฐ ํ ๊ฐ์ ๋ฆฌํ๋ ธ๋๋ฅผ ๊ฐ์ง๋ ํธ๋ฆฌ์ธ ๊ฒฝ์ฐ์๋ ๋ ธ๋ ์์, ํธ๋ฆฌ์ ๋์ด๊ฐ ์ผ์นํ๊ฒ ๋์ด ์ฐ์ฐ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(N)์ด ๋๊ฒ ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๋น ๋ฅด๋ค๊ณ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์, ์ ์ฒด ๊ท ํ์ ๋ง์ถ๋ ์ด์ง ํ์ํธ๋ฆฌ์ ์ผ์ข ์ธ AVL tree๊ฐ ์ ์๋์์ต๋๋ค.
** AVLํธ๋ฆฌ ์ ๋ฆฌ ์์
์์ฝ
์ด์งํ์ํธ๋ฆฌ๋ ์ด์งํ์๊ณผ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ๊ฒฐํฉํ ์๋ฃ๊ตฌ์กฐ์ ์ผ์ข ์ผ๋ก,
ํจ์จ์ ์ธ ํ์ ๋ฐ ๋น๋ฒํ ์ฝ์ /์ญ์ ๊ฐ ๊ฐ๋ฅํ๋๋ก ๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
๊ฐ ๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์๋ ํด๋น ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ ๋ ธ๋๋ค๋ก,
๊ฐ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์๋ ํด๋น ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฐ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋์ด ์๊ณ
์ผ์ชฝ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ๋ํ ๋ชจ๋ ์ด์งํ์ํธ๋ฆฌ์ ๋๋ค.
** O(h) -> O(logn)์ผ๋ก ํํ
์ด์ง ํ์ํธ๋ฆฌ์์ ํ์ ์๊ฐ ๋ณต์ก๋๋ ํธ๋ฆฌ์ ๋์ด๊ฐ h์ผ ๋O(h)๊ฐ ๋ฉ๋๋ค.
์ฝ์ ์์๋, ํญ์ ๋ฆฌํ๋ ธ๋์ ์ฝ์ ํ๋ฉฐ O(h)๋ฒ ํ์ ํ ์ฝ์ ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ๋ณต์ก๋๋ ํ์๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก O(h)์ ๋๋ค.
์ญ์ ๋ ํฌ๊ฒ ์ธ ๊ฐ์ง ๊ฒฝ์ฐ๋ก ๊ตฌ๋ถํ ์ ์๋๋ฐ
๋จผ์ ์์๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๊ทธ๋ฅ ์ญ์ ํ๋ฉด ๋๊ณ
์์๋ ธ๋๊ฐ ํ๊ฐ์ผ ๊ฒฝ์ฐ์๋ ์ญ์ ํ๋ ค๋ ๋ ธ๋์ ๋ถ๋ชจ์ ์์์ ์ฐ๊ฒฐํด์ฃผ๊ณ ํด๋น ๋ ธ๋๋ฅผ ์ญ์ ํ๋ฉด ๋ฉ๋๋ค.
์์๋ ธ๋๊ฐ ๋ ๊ฐ์ผ ๊ฒฝ์ฐ์๋,
์ผ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ์์๊ฐ ํน์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ฐพ์
๋ ์ค์ ์ํ๋ ๋ ธ๋๋ก ์ญ์ ํ ๋ ธ๋๋ฅผ ๋์ฒดํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ด์ง ํ์ํธ๋ฆฌ์ ํ๊ณ์ ์, ์ค์ ์ฐ์ฐ๋ค์ ์๊ฐ๋ณต์ก๋๊ฐ ํธ๋ฆฌ์ ๋์ด์ ๊ด๋ จ์ด ์๊ธฐ ๋๋ฌธ์
๋ชจ๋ ๋ ธ๋๊ฐ ํ ๊ฐ์ ๋ฆฌํ๋ ธ๋๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ์๋ ๋ ธ๋์์ ํธ๋ฆฌ ๋์ด๊ฐ ์ผ์นํ๊ฒ ๋์ด ์๊ฐ๋ณต์ก๋๊ฐ O(N)์ด ๋ฉ๋๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/Python] 20040. ์ฌ์ดํด ๊ฒ์ (0) | 2021.10.12 |
---|---|
[CS/์๊ณ ๋ฆฌ์ฆ] ๊ฑฐ์ ์ ๋ ฌ๋ List์์ ์ด๋ค ์ ๋ ฌ์ด ๊ฐ์ฅ ํจ์จ์ ์ผ๊น? (0) | 2021.10.09 |
[๋ฐฑ์ค/Python] 1501. ์์ด ์ฝ๊ธฐ (1) | 2021.10.06 |
[๋ฐฑ์ค/Python] 12757. ์ ์ค์ JBNU (0) | 2021.10.06 |
[๋ฐฑ์ค/C++] 4195. ์น๊ตฌ ๋คํธ์ํฌ (0) | 2021.09.28 |