์ผ๋ฐ์ ์ผ๋ก ๋์ ์ ๋ณด์ ๊ฐ ํญ๋ชฉ๋ค์ ๊ณ์ธต์ ์ผ๋ก ๊ตฌ์กฐํํ ๋ ์ฌ์ฉํ๋ ๋น์ ํ ์๋ฃ๊ตฌ์กฐ
๋ฐ์ดํฐ ์ ์ฅ
์ ์๋ฏธ๋ณด๋ค๋์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋ก ํ์
ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค- ์ฌ์ดํด์ด ์๋ ๊ทธ๋ํ๋ผ๊ณ ๋ ํ๋ค
๋ถ๋ชจ-์์ ๊ด๊ณ์ ๋ ธ๋๋ค๋ก ์ด๋ฃจ์ด์ง๋ค
๊ณ์ธต์ ์ธ ๊ตฌ์กฐ ํํ
๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
์ธ๊ณต์ง๋ฅ์ ์์ฌ๊ฒฐ์ ํธ๋ฆฌ
- ๋ ธ๋(node): ํธ๋ฆฌ์ ๊ตฌ์ฑ์์
- ๋ฃจํธ(root): ๋ถ๋ชจ๊ฐ ์๋ ๋ ธ๋(์ต์์ ๋ ธ๋)
- ์๋ธ ํธ๋ฆฌ(subtree): ํ๋์ ๋ ธ๋์ ๊ทธ ๋ ธ๋๋ค์ ์์๋ค๋ก ์ด๋ฃจ์ด์ง ํธ๋ฆฌ
- ๋จ๋ง๋ ธ๋(terminal node, leaf node): ์์์ด ์๋ ๋ ธ๋
- ๋น๋จ๋ง๋ ธ๋: ์ ์ด๋ ํ๋์ ์์์ ๊ฐ์ง๋ ๋ ธ๋
- ๋ ๋ฒจ(level): ํธ๋ฆฌ์ ๊ฐ ์ธต์ ๋ฒํธ
- ๋์ด(height): ํธ๋ฆฌ์ ์ต๋ ๋ ๋ฒจ
- ์ฐจ์(degree): ๋ ธ๋๊ฐ ๊ฐ์ง๊ณ ์๋ ์์ ๋ ธ๋์ ๊ฐ์
- ๋ด๋ถ๋ ธ๋(internal node): ์์์ด ์๋ ๋ ธ๋๋ก leaf node๋ผ๊ณ ๋ ํจ
- ์ธ๋ถ๋ ธ๋(external node): leaf node๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋, ์์์ด ์๋ ๋ ธ๋
๋ฃจํธ๋ ธ๋ -> ์ผ์ชฝ ์๋ธํธ๋ฆฌ -> ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ์์๋ก ์ํํ๋ ๋ฐฉ์
๊น์ด ์ฐ์ ์ํ
๋ผ๊ณ ๋ ํ๋ค
์ผ์ชฝ ์๋ธํธ๋ฆฌ -> ๋ ธ๋ -> ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ์์๋ก ์ํํ๋ ๋ฐฉ์
๋์นญ ์ํ
๋ผ๊ณ ๋ ํ๋ค
์ผ์ชฝ ์๋ธํธ๋ฆฌ -> ๋ฃจํธ๋ ธ๋ -> ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ์์๋ก ์ํํ๋ ๋ฐฉ์
๋ชจ๋ ๋ ธ๋๊ฐ 2๊ฐ ์ดํ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ
๋ชจ๋ ๋ ธ๋๋ค์ด ์์์ ํ๋๋ง ๊ฐ๋ ์ด์งํธ๋ฆฌ
์ฉ์ด ๊ทธ๋๋ก ํธ๋ฆฌ์ ๊ฐ ๋ ๋ฒจ์ ๋ ธ๋๊ฐ ๊ฝ ์ฐจ์๋ ์ด์งํธ๋ฆฌ
๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ๊ณ ๋ชจ๋ ๋ ธ๋๊ฐ ์ฑ์์ ธ ์๋ ์ด์งํธ๋ฆฌ
- ํฌํ ์ด์ง ํธ๋ฆฌ์ ๋ ธ๋ ๋ฒํธ๊ฐ ์ผ์น
ํ์์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํ ์ด์ง ํธ๋ฆฌ ๊ธฐ๋ฐ์ ์๋ฃ๊ตฌ์กฐ
- ํ์์ด ํธ๋ฆฌ์ ๋์ด๋งํผ ์๊ฐ์ด ํ์ํ๋ค
- ๋ฐ์ดํฐ๋ right>=root>=left ๋ก ์ ์ฅ๋๋ค
- ๋ชจ๋ ๋ ธ๋๋ ์ค๋ณต๋ ๊ฐ์ ๊ฐ์ง์ง ์๋๋ค
- ์ด์ง ํ์์ ์ค์์ํํ๋ฉด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๊ฐ์ ์ป์ ์ ์๋ค.
๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ๋ก O(logn)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค
- ์ด์ง ํ์ ํธ๋ฆฌ์ ํ ์ชฝ์ผ๋ก ๊ฐ์ด ํธํฅ๋๊ฒ ๋ค์ด์จ๋ค๋ฉด ๊ต์ฅํ ๋นํจ์จ์ ์ธ ํผํฌ๋จผ์ค๋ฅผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- root node ๋ณด๋ค ์์ ๊ฐ์ reft node๋ก ํฐ ๊ฐ์ right node๋ก ๋ฐฐ์นํ๋ ๊ท ํํธ๋ฆฌ
- Root Property: ๋ฃจํธ๋ ธ๋๋ ๊ฒ์ (Black)์ด๋ค.
- External Property: ๋ชจ๋ external node๋ค์ ๊ฒ์ ์ด๋ค.
- Internal Property: ๋นจ๊ฐ(Red)๋ ธ๋์ ์์์ ๊ฒ์ ์ด๋ค.
- Depth Property: ๋ชจ๋ leaf node์์ black depth๋ ๊ฐ๋ค
- leaf์์ root๊น์ง ๊ฐ๋ ๊ฒฝ๋ก์์ ๋ง๋๋ black node์ ๊ฐ์๋ ๊ฐ๋ค
์ฐ๊ฒฐ๋์ด ์๋ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ํํํ๋ ์๋ฃ๊ตฌ์กฐ
๋ชจ๋ ๋ค๋ฆฌ๋ฅผ ํ ๋ฒ๋ง ๊ฑด๋์ ์ฒ์ ์ถ๋ฐํ๋ ์ฅ์๋ก ๋์์ค๋ ๋ฌธ์
- ํ๋ถ๊ทธ๋ฆฌ๊ธฐ
- ์ค์ผ๋ฌ ์ ๋ฆฌ: ๋ชจ๋ ์ ์ ์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ์๊ฐ ์ง์์ด๋ฉด ์ค์ผ๋ฌ ๊ฒฝ๋ก ์กด์ฌ
- ์์น: ์ ์ (Vertex)
- ๋ค๋ฆฌ: ๊ฐ์ (Edge)
- ์ฌ๋ฌ ๊ฐ์ง ํน์ฑ์ ๊ฐ์ง ์ ์๋ ๊ฐ์ฒด
- V(G): ๊ทธ๋ํ G์ ์ ์ ๋ค์ ์งํฉ
- ๋ ธ๋(node) ๋ผ๊ณ ๋ ๋ถ๋ฆผ
- ์ ์ ๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ์๋ฏธ
- E(G): ๊ทธ๋ํ G์ ๊ฐ์ ๋ค์ ์งํฉ
- ๋งํฌ(link) ๋ผ๊ณ ๋ ๋ถ๋ฆผ
- ์ธ์ ์ ์ (Adjacent Vertex): ๊ฐ์ ์ ์ํด ์ง์ ์ฐ๊ฒฐ๋ ์ ์
- ๋จ์ ๊ฒฝ๋ก(Simple Path): ํ๋ถ๊ทธ๋ฆฌ๊ธฐ์ ๊ฐ์ด ๊ฐ์ ๊ฐ์ ์ ์ง๋๊ฐ์ง ์๋ ๊ฒฝ๋ก
- ์ฐจ์(Degree): ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์์ ํ๋์ ์ ์ ์ ์ธ์ ํ ์ ์ ์ ์
- ์ง์ ์ฐจ์(Out-Degree): ๋ฐฉํฅ ๊ทธ๋ํ์์ ์ธ๋ถ์์ ๋ค์ด์ค๋ ๊ฐ์ ์ ์
- ์ง์ถ ์ฐจ์(In-Degree): ๋ฐฉํฅ ๊ทธ๋ํ์์ ์ธ๋ถ๋ก ํฅํ๋ ๊ฐ์ ์ ์
- ๊ฒฝ๋ก ๊ธธ์ด(Path Length): ๊ฒฝ๋ก๋ฅผ ๊ตฌ์ฑํ๋๋ฐ ์ฌ์ฉ๋ ๊ฐ์ ์ ์
- ์ฌ์ดํด(Cycle): ๋จ์ ๊ฒฝ๋ก์ ์์ ์ ์ ๊ณผ ์ข ๋ฃ ์ ์ ์ด ๋์ผํ ๊ฒฝ์ฐ
๊ฐ์ ์ ๋น์ฉ์ด๋ ๊ฐ์ค์น๊ฐ ํ ๋น๋ ๊ทธ๋ํ
- ๊ฐ์ (i,j)๊ฐ ๊ทธ๋ํ์ ์กด์ฌ ํ๋ฉด M[i][j]=1, ๊ทธ๋ ์ง ์์ผ๋ฉด M[i][j]=0
- ๊ฐ ์ ์ ์ ์ธ์ ํ ์ ์ ๋ค์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ํํ
์ ๋ต ๋ณด๊ธฐ
์ด์งํธ๋ฆฌ(Binary Tree)๋ ์์ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ธ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ์ด๊ณ , ์ด์ง ํ์ ํธ๋ฆฌ(BST)๋ ์ด์ง ํ์๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๊ฒฐํฉํ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ์ด์ง ํ์์ ํจ์จ์ ์ธ ํ์ ๋ฅ๋ ฅ์ ์ ์งํ๋ฉด์, ๋น๋ฒํ ์๋ฃ ์ ๋ ฅ๊ณผ ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ์ด์ง ํ์ ํธ๋ฆฌ๋ ์ผ์ชฝ ํธ๋ฆฌ์ ๋ชจ๋ ๊ฐ์ ๋ฐ๋์ ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ์์์ผ ํ๊ณ , ์ค๋ฅธ์ชฝ ํธ๋ฆฌ์ ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ์ปค์ผ ํ๋ ํน์ง์ด ์์ต๋๋ค. ์ด์ง ํ์ ํธ๋ฆฌ์ ํ์ ์ฐ์ฐ์ ํธ๋ฆฌ์ ๋์ด์ ์ํฅ์ ๋ฐ์ ๋์ด๊ฐ h์ผ ๋ ์๊ฐ ๋ณต์ก๋๋ O(h)์ด๋ฉฐ, ํธ๋ฆฌ์ ๊ท ํ์ด ํ์ชฝ์ผ๋ก ์น์ฐ์ณ์ง ๊ฒฝ์ฐ worst case๊ฐ ๋๊ณ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค. ์ด๋ฐ worst case๋ฅผ ๋ง๊ธฐ ์ํด ๋์จ ๊ธฐ๋ฒ์ด RBT(Red-Black Tree)์ ๋๋ค.
์ ๋ต ๋ณด๊ธฐ
ref)