2021. 9. 20. 08:00ใ์ฝ๋ฉ ํ ์คํธ ์ค๋น/์๊ณ ๋ฆฌ์ฆ
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
์ค๋์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ง ํ์์ ๋ํด์ ๊ณต๋ถํ๋ ์๊ฐ์ธ ๊ฒ์ด์์.
์ฝํ ๋ฅผ ์ ๋ฅํ ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ ์ํด ์ด์ฌํ ๊ณต๋ถ ํด ๋ณด๊ฒ ์ต๋๋ค!
์์ค ์ฝ๋์ ๋ํด์ ํ์ธ ํ๊ณ ์ถ์ผ์ ๋ถ๋ค๊ป์๋ ์ฃผ๋ํ๋์ Git hub์ ๊ด์ฌ์ ์ฃผ์ธ์!
๐ Graph (๊ทธ๋ํ) ๋?
๊ทธ๋ํ๋ ์ค์ ์ธ๊ณ์ ํ์์ด๋ ์ฌ๋ฌผ์ ์ ์ (Vertex) ํน์ Node(๋ ธ๋)์ ๊ฐ์ (Edge ํน์ Link, Branch)๋ก ํํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด์์.
๐Graph ๊ด๋ จ ์ฉ์ด
๐ ์์ :) ์ง์์ ํ์ฌ๋ก ๊ฐ๋ ๊ฒฝ๋ก ๊ทธ๋ํ๋ก ํํ
- Node(๋ ธ๋) : ์์น๋ฅผ ๋งํ๋ค. ์ ์ (Vertext)๋ผ๊ณ ๋ ํ๊ณ , ์์ ์ฌ์ง์์ ์ง, ์งํ์ฒ , ํ์ฌ, ๋ฒ์ค์ ๋๊ทธ๋ผ๋ฏธ๊ฐ Node์ด๋ค.
- Link(๊ฐ์ ) : Node ๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ํ ์ ์ผ๋ก Node๋ฅผ ์ฐ๊ฒฐํ ์ ์ด๋ค. (Edge ๋๋ Branch๋ผ๊ณ ๋ ํ๋ค.)
- Adjacent Vertext(์ธ์ ์ ์ ) : Node์ Node ๊ฐ์ ๊ฐ์ ์ผ๋ก ์ง์ ์ฐ๊ฒฐ๋ ์ ์ (ํน์ Node) ์์ ๊ทธ๋ฆผ์์ ๋ณด์์ ๋, ์ง๊ณผ ์งํ์ฒ ํน์ ๋ฒ์ค์ ํ์ฌ ๋ฑ์ด ๋ ์ ์๋ค.
- ์ถ๊ฐ ์ฐธ๊ณ ์ฉ์ด
- ์ ์ ์ ์ฐจ์ (Degree) : ๋ฌด๋ฐฉํฅ(์์ ๊ทธ๋ฆผ์ฒ๋ผ ํ์ดํ๊ฐ ๊ทธ๋ ค์ง์ง ์์ ๊ฐ์ ๋ค๋ก ์ด๋ค์ง ๊ทธ๋ํ)์์ ํ๋์ Node์ ์ธ์ ํ Node์ ์. ์ง์ ๊ธฐ์ค์ผ๋ก ๋ณด๋ฉด ์งํ์ฒ ๊ณผ ๋ฒ์ค๊ฐ ๋๋ค.
- ์ง์ ์ฐจ์ (In-Degree) : ๋ฐฉํฅ ๊ทธ๋ํ(์์ ๊ทธ๋ฆผ์ฒ๋ผ ํ์ดํ๊ฐ ๊ทธ๋ ค์ง ๊ฐ์ ๋ค๋ก ์ด๋ค์ง ๊ทธ๋ํ)์์ Node๋ฅผ ๊ธฐ์ค์ผ๋ก ์ธ๋ถ์์ ์ค๋ ๊ฐ์ ์ ์. ์๋ฅผ ๋ค์ด ํ์ฌ๋ก ์น๋ฉด ํ์ฌ Node ์ ์ฅ์์ ์ธ๋ถ๋ก ๋ค์ด์ค๋ ๊ฐ์ ์ 2๊ฐ(์งํ์ฒ , ๋ฒ์ค)์์ผ๋ก 2๊ฐ๊ฐ ๋๋ค.
- ์ง์ถ ์ฐจ์ (Out-Degree) : ๋ฐฉํฅ ๊ทธ๋ํ์์ ์ธ๋ถ๋ก ํฅํ๋ ๊ฐ์ ์ ์. ์๋ฅผ ๋ค์ด ์ง์ ๊ธฐ์ค์ผ๋ก ์ง์ ๋ฒ์ค์ ์งํ์ฒ ๋ก ๊ฐ๋ ํ์ดํ ๊ฐ์ ์ด ๋๊ฐ์ด๊ธฐ ๋๋ฌธ์ 2๊ฐ์ด๋ค.
- ๋จ์ ๊ฒฝ๋ก (Simple Path) : ์ฒ์ Node์ ๋ Node๋ฅผ ์ ์ธํ๊ณ , ์ค๋ณต๋ Node๊ฐ ์๋ ๊ฒฝ๋ก. ์์ ๊ทธ๋ฆผ์์ ์ง์์ ์งํ์ฒ ์ ํ๊ณ , ํ์ฌ๋ฅผ ๊ฐ๋ค๋ฉด ์ด๋ ์ค๋ณต๋๋ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์ ๋จ์ ๊ฒฝ๋ก์ด๋ค. ํ์ง๋ง, ์ง์์ ์งํ์ฒ ์ ํ๊ณ , ํ์ฌ๋ก ์์ ๋ฒ์ค๋ฅผ ํ๋ค๊ฐ ๋ค์ ํ์ฌ๋ก ์ค๋ฉด ํ์ฌ๊ฐ ๋๋ฒ ์ค๋ณต์ด ๋์ด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ์ ๋จ์ ๊ฒฝ๋ก๊ฐ ์๋๋ค.
๋ง์ฝ ์ง์์ ์งํ์ฒ ์ ํ๊ณ , ํ์ฌ๋ฅผ ๊ฐ๋ค๊ฐ ๋ฒ์ค๋ฅผ ํ๊ณ , ์ง์ ๋ค์ ๋์์ค๋ฉด ์ง์ด ๋๋ฒ ์ค๋ณต๋ ๊ฑฐ ๊ฐ์ด ๋ณด์ด๋, ์ด๋ ์ค๋ณต์ด ์๋๊ณ , ๋จ์ ๊ฒฝ๋ก ์ทจ๊ธํ๋ค. - ์ฌ์ดํด (Cycle) : ๋จ์ ๊ฒฝ๋ก์ ์์ Node์ ์ข ๋ฃ Node๊ฐ ๋์ผํ ๊ฒฝ์ฐ '๋จ์ ๊ฒฝ๋ก' ๋ง์ง๋ง์ ๋ ์๋ ๋จ์ ๊ฒฝ๋ก๋ ๋๊ณ , ์ฌ์ดํด๋ ๋๋ค.
๐Graph (๊ทธ๋ํ) ์ข ๋ฅ
๐ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ (Undirected Graph)
- ๊ฐ์ ์ ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ
- ๊ฐ์ ์ ํตํด, Node๋ ์๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์๋ค.
- ๋ณดํต Node A, B๊ฐ ์ฐ๊ฒฐ ๋์ด ์์ ๋, (A, B) ๋๋ (B, A)๋ก ํ๊ธฐํ๋ค.
๐ ๋ฐฉํฅ ๊ทธ๋ํ (Directed Graph)
- ๊ฐ์ ์ ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ
- ๋ณดํต Node A, B๊ฐ A -> B๋ก ๊ฐ๋ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ ๋์ด์์ ๋, <A, B>๋ก ํ๊ธฐํ๋ค. (<B, A> ๋ B -> A๋ก ๊ฐ๋ ๊ฐ์ ์ด ์๋ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ <A, B>๊ฐ ์๋๋ค.
๐ ๊ฐ์ค์น ๊ทธ๋ํ (Weighted Graph) ํน์ Network (๋คํธ์ํฌ)
- ๊ฐ์ ์ ๋น์ฉ ํน์ ๊ฐ์ค์น๊ฐ ํ ๋น(ํ๊ธฐ)๋ ๊ทธ๋ํ
๋งจ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๊ฐ๋๋ฐ, ์์ ๋ถ๋ถ์ ๊ฒฝ์ฐ 4, 5์ ๋น์ฉ์ด ๋ค์ด๊ฐ๋๋ฐ ๋ฐํด ์๋์ชฝ์ 2, 1์ ๋น์ฉ์ด ๋ค์ด๊ฐ๋ ๊ฒ์ด์์.
๊ฒฐ๊ตญ ์๋์ชฝ์ผ๋ก ๊ฐ๋ ๊ฒ์ด ๋น์ฉ์ด ๋ ์ ๊ฒ ๋๋ ๊ฐ๊น๋ค๊ณ ํํํ ์ ์๊ฒ ์ง์!
๐ ์ฐ๊ฒฐ ๊ทธ๋ํ (Connected Graph)์ ๋น์ฐ๊ฒฐ ๊ทธ๋ํ (Disconnected Graph)
- ์ฐ๊ฒฐ ๊ทธ๋ํ (Connected Graph)
- ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ ์๋ ๋ชจ๋ Node์ ๋ํด ํญ์ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ
- ๋น์ฐ๊ฒฐ ๊ทธ๋ํ (Disconnected Graph)
- ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์์ ํน์ Node์ ๋ํด ๊ฒฝ๋ก๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ
๐ Cycle(์ฌ์ดํด)๊ณผ ๋น์ํ ๊ทธ๋ํ (Acyclic Graph)
- Cycle(์ฌ์ดํด)
- ๋จ์ ๊ฒฝ๋ก์ ์์ Node์ ์ข ๋ฃ Node๊ฐ ๋์ผํ ๊ฒฝ์ฐ
- ๋น์ํ ๊ทธ๋ํ(Acyclic Graph)
- Cycle์ด ์๋ ๊ทธ๋ํ
๐ Complete Graph (์์ ๊ทธ๋ํ)
- ๊ทธ๋ํ์ ๋ชจ๋ Node๊ฐ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ทธ๋ํ
๐Graph์ Tree ์ฐจ์ด์
Tree๋ Graph ์ค์ ์ํ ํน๋ณํ ์ข ๋ฅ๋ผ๊ณ ํ ์ ์๋ ๊ฒ์ด์์!
๊ทธ๋ํ | ํธ๋ฆฌ | |
์ ์ | Node์ Node๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ์ ์ผ๋ก ํํ๋๋ ์๋ฃ ๊ตฌ์กฐ | ๊ทธ๋ํ์ ํ ์ข ๋ฅ, ๋ฐฉํฅ์ฑ์ด ์๋ ๋น์ํ ๊ทธ๋ํ |
๋ฐฉํฅ์ฑ | ๋ฐฉํฅ, ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ ๋ ๋ค ์กด์ฌ | ๋ฐฉํฅ ๊ทธ๋ํ๋ง ์กด์ฌ |
์ฌ์ดํด | ์ฌ์ดํด ๊ฐ๋ฅ, ์ํ ๋ฐ ๋น์ํ ๊ทธ๋ํ ๋ชจ๋ ์กด์ฌ | ๋น์ํ ๊ทธ๋ํ๋ก ์ฌ์ดํด ์์ |
๋ฃจํธ ๋ ธ๋ | ๋ฃจํธ ๋ ธ๋ ์์ | ๋ฃจํธ ๋ ธ๋ ์์ |
๋ถ๋ชจ / ์์ ๊ด๊ณ | ๋ถ๋ชจ ์์ ๊ฐ๋ ์ด ์์ | ๋ถ๋ชจ ์์ ๊ด๊ณ ์์ |
๋ฌด๋ฐฉํฅ, ๋ฐฉํฅ, ๊ฐ์ค์น ๊ทธ๋ํ๋ ์๊ณ ๋ฆฌ์ฆ์์ ๊ฝค ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ ์ฌ๊ฒจ ๋ณด๋๊ฒ ์ข์ ๊ฒ์ด์์!
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์
จ๋์? ๊ตฌ๋
๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ ๊ทธ๋ฆฌ๊ณ ๋ฐฉ๋ช
๋ก์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค
'์ฝ๋ฉ ํ ์คํธ ์ค๋น > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] Breadth-First Search(BFS) - ๋๋น ์ฐ์ ํ์ & Depth-First Search(DFS) - ๊น์ด ์ฐ์ ํ์ (0) | 2021.09.28 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์์ฐจ ํ์ (0) | 2021.09.19 |
[์๊ณ ๋ฆฌ์ฆ] ์ด์ง ํ์ ๊ธฐ๋ฒ (0) | 2021.09.17 |
[์๊ณ ๋ฆฌ์ฆ] Quick Sort (ํต ์ ๋ ฌ) (0) | 2021.09.09 |
[์๊ณ ๋ฆฌ์ฆ] ๋ณํฉ ์ ๋ ฌ (merge sort) (0) | 2021.09.09 |