์์ฑ์ : ์๊ทธ๋ฆผ
์๋ฃ๊ตฌ์กฐ(Data Structure)๋ ์๋ฃ์ ํจ์จ์ ์ผ๋ก ์ ๊ทผํ๊ณ ์์ ํ ์ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํ๊ณ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ด์ผ๊ธฐํ๋ค. ์๋ฃ๊ตฌ์กฐ๋ ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ ํํ์ ๋ฐ๋ผ ์ ํ ์๋ฃ๊ตฌ์กฐ์ ๋น์ ํ ์๋ฃ๊ตฌ์กฐ๋ก ๊ตฌ๋ถ๋๋ฉฐ, ์ ํ ์๋ฃ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๊ฐ ์ผ๋ ฌ๋ก ๋์ด๋์ด ์๊ณ ๋น์ ํ ์๋ฃ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๊ฐ ํน์ ํ ํํ๋ฅผ ๋๊ณ ์๋ค. ์ ํ ์๋ฃ๊ตฌ์กฐ์ ์ข ๋ฅ์๋ array, linked list, stack, queue ๋ฑ์ด ์์ผ๋ฉฐ ๋น์ ํ ์๋ฃ๊ตฌ์กฐ๋ก๋ tree, graph ๋ฑ์ด ์๋ค.
Table of Contents
๋์ผํ ์๋ฃํ์ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ ฌ๋ก ๋์ดํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ์ ํ ์๋ฃ๊ตฌ์กฐ
- ๋ฐ์ดํฐ ์ ๊ทผ์ด ์ฉ์ดํ๋ค. (์ธ๋ฑ์ค๋ก ์ ๊ทผ - Random Access๊ฐ ๊ฐ๋ฅ)
- ๋ฐ์ดํฐ ์ฝ์ /์ญ์ ๊ฐ ์ด๋ ต๋ค. (Shift ํด์ค์ผ ํจ)
- ๊ตฌ์กฐ๊ฐ ๊ฐ๋จํ์ฌ ํ๋ก๊ทธ๋จ ์์ฑ์ด ์ฝ๋ค.
/* ์ ์ธ (Declaring Arrays) */
int[] arrayOfInt;
String[] arrayOfString;
/* ์์ฑ (Creating Arrays) */
arrayOfInt = new int[100];
arrayOfString = new String[10];
/* ์ด๊ธฐํ (Initializing Arrays) */
for (int i = 0; i < arrayOfInt.length; i++) {
arrayOfInt[i] = i;
}
arrayOfString = new String[]{"hello", "world"};
String[] name = {"Stacy", "Tracy", "Dorothy"};
- ๋ฐ์ดํฐ ์กฐํ : O(1)
- ๋ฐ์ดํฐ ์ฝ์ /์ญ์ ํ๊ธฐ : O(n)
๊ฐ ๋ ธ๋๊ฐ ๋ฐ์ดํฐ์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ์ผ๋ ฌ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๋ฐฉ์์ด๋ค.
- ์ ํ ์๋ฃ๊ตฌ์กฐ
- ๋ฐ์ดํฐ์ ์ ๊ทผ์ด ๋๋ฆฌ๋ค. (๋งํฌ๋ฅผ ํ๊ณ ๊ฐ์ ์ฐพ์์ผ ํ๋ค.)
- ๋ฐ์ดํฐ์ ์ฝ์ /์ญ์ ์ฐ์ฐ์ด ์ฉ์ดํ๋ค.
- ํฌ์ธํฐ๋ฅผ ์ํ ์ถ๊ฐ ๊ณต๊ฐ์ด ํ์ํ๋ค.
- Singly Linked List
- Doubly Linked List
- ์ ์ฝ๋ ์คํ : LinkedListExample.java
- ๋ฐ์ดํฐ ์กฐํ : O(n)
- ๋งจ ์/๋ค์ ๋ฐ์ดํฐ ์ฝ์ /์ญ์ ํ๊ธฐ : O(1) (SinglyLinkedList์ ๊ฒฝ์ฐ ๋งจ ๋ค์ ๋ฐ์ดํฐ ์ญ์ ์ฐ์ฐ์ O(n))
- ์ค๊ฐ์ ์ํ๋ ์์น์ ๋ฐ์ดํฐ ์ฝ์ /์ญ์ ํ๊ธฐ : O(n) (์ํ๋ ์์๊น์ง ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๊ณผ์ ์ด ์์ผ๋ฏ๋ก O(n) + O(1))
- ๋ฐ์ดํฐ ์ ๊ทผ ์๋
- Array๋ ์ธ๋ฑ์ค๋ฅผ ํตํ Random Access๋ฅผ ์ง์ํ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋ O(1)๋ก ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค.
- LinkedList๋ ์์ฐจ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋ O(N)์ด ๊ฑธ๋ฆฐ๋ค.
- ๋ฐ์ดํฐ์ ์ฝ์ /์ญ์ ์๋
- Array๋ ๋ฐ์ดํฐ๋ฅผ ์ค๊ฐ์ด๋ ๋งจ ์์ ์ฝ์ /์ญ์ ํ๋ ๊ฒฝ์ฐ shift๊ฐ ํ์ํ๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ ๋ง์์๋ก ๋นํจ์จ์ ์ด๋ค.
- LinkedList๋ ์ค๊ฐ ์ฝ์ /์ญ์ ๋ ๋๊ฐ์ด O(N)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ง, ๋งจ ์ ๋๋ ๋ค์ ์ฝ์ ํ ๊ฒฝ์ฐ O(1)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
- ๋ค๋ง LinkedList๋ ๋ฐ์ดํฐ ์ฝ์ /์ญ์ ๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ํ ๋น/ํด์ ๊ฐ ์ผ์ด๋๋ฏ๋ก ์๊ฐ๋ณต์ก๋๋ ๋น ๋ฅผ์ง๋ผ๋ ์์คํ ์ฝ(System Call)์ ์์ด์ Array๋ณด๋ค ๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น
- Array๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ด๋ฃจ์ด์ง๋ค. (Compile time)
- LinkedList๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ด๋ฃจ์ด์ง๋ค. (Runtime)
- Array์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ฝ์ ์ ๋ชจ๋ ๊ณต๊ฐ์ด ๋ค ์ฐจ๋ฒ๋ ธ๋ค๋ฉด ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ์ํ์ง๋ง LinkedList๋ ๋์ ์ผ๋ก ํ ๋น๋ฐ์ ์ ์๋ค.
๋ฐ์ดํฐ ์ฝ์ /์ญ์ ๊ฐ ๋น๋ฒํ๋ค๋ฉด LinkedList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๊ณ , ๋ฐ์ดํฐ ์ ๊ทผ ์๋๊ฐ ์ค์ํ๋ค๋ฉด Array๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- ์ ํ ์๋ฃ๊ตฌ์กฐ
- ์ฝ์ , ์ญ์ ์ฐ์ฐ์ด ํ ๋ฐฉํฅ์์ ์ด๋ฃจ์ด์ง๋ค.
- LIFO(Last In First Out) : ๋์ค์ ๋ค์ด๊ฐ ์์๊ฐ ๋จผ์ ๋์ค๋ ๊ตฌ์กฐ์ด๋ค.
Top
: ์คํ์ ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋ ์์น
push
: ์คํ์ top์ ์์ ์ฝ์pop
: ์คํ์ top์ ์๋ ์์ ์ญ์ ๋ฐ ๋ฐํpeek
: ์คํ์ top์ ์๋ ์์ ๋ฐํ
- Array๋ฅผ ํตํด ๊ตฌํํ Stack
- Singly Linked List๋ฅผ ํตํด ๊ตฌํํ Stack
- ์ ์ฝ๋ ์คํ : StackExample.java
- ๋ฐ์ดํฐ ์ฝ์ /์ญ์ : O(1)
- top ๋ฐ์ดํฐ ์กฐํ : O(1)
- ํน์ ๋ฐ์ดํฐ ์กฐํ : O(n)
- ์์คํ ์คํ(System Stack) / ์คํ์๊ฐ ์คํ(Runtime stack) : ํ๋ก๊ทธ๋จ์ ํจ์ ํธ์ถ๊ณผ ๋ณต๊ท์ ๋ฐ๋ฅธ ์คํ ์์ ๊ด๋ฆฌ
- ์ธํฐ๋ฝํธ ๋ฃจํด ์ฒ๋ฆฌ
- ์น ๋ธ๋ผ์ฐ์ ๋ฐฉ๋ฌธ ๊ธฐ๋ก ๊ด๋ฆฌ (๋ค๋ก๊ฐ๊ธฐ)
- ์คํ ์ทจ์ (undo)
- ์์์ ํ์ ํ๊ธฐ๋ฒ(Postfix Notation)
- ์์์ ๊ดํธ์ ๊ฒ์ฌ
- ๊ณ์ฐ๊ธฐ ๊ฒ์ฌ
- ๊น์ด ์ฐ์ ํ์(DFS, Depth-First Search)
ํ๋ก๊ทธ๋จ์ ํจ์ ํธ์ถ๊ณผ ๋ณต๊ท์ ๋ฐ๋ฅธ ์คํ ์์ ๊ด๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฐ์ง๋ค.
- ํจ์ ํธ์ถ์ด ๋ฐ์ํ๋ฉด ์คํ ํ๋ ์(stack frame)์ ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์, ์ํ ํ ๋ณต๊ทํ ์ฃผ์ ๋ฑ์ ์ ๋ณด๋ฅผ ์ ์ฅํ์ฌ ์์คํ ์คํ์ ์ฝ์ ํ๋ค.
- ํจ์์ ์คํ์ด ๋๋๋ฉด ์์คํ ์คํ์ top์ ์๋ stack frame ์์๋ฅผ popํ๊ณ , frame์ ์ ์ฅ๋์ด ์๋ ๋ณต๊ท ์ฃผ์๋ฅผ ํ์ธํ๊ณ ๋ณต๊ทํ๋ค.
- ํจ์ ํธ์ถ - ๋ณต๊ท์ ๋ฐ๋ผ ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๊ณ , ์ ์ฒด ํ๋ก๊ทธ๋จ ์ํ์ด ์ข ๋ฃ๋๋ฉด ์์คํ ์คํ์ ๊ณต๋ฐฑ ์คํ์ด ๋๋ค.
ํจ์ ํธ์ถ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ํธ์ถ๋ ํจ์๊ฐ ๊ฐ์ฅ ๋จผ์ ์คํ์ ์๋ฃํ๊ณ ๋ณต๊ทํ๋ ํ์ ์ ์ถ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์, ์คํ์ ์ด์ฉํด ๊ด๋ฆฌํ๋ค.
- ์ ํ ์๋ฃ๊ตฌ์กฐ
- ํ ๋ฐฉํฅ์์๋ ์ฝ์ ์ฐ์ฐ์ด, ๋ฐ๋ ๋ฐฉํฅ์์๋ ์ญ์ ์ฐ์ฐ์ด ์ด๋ฃจ์ด์ง๋ค.
- FIFO(First In First Out) : ๋จผ์ ๋ค์ด๊ฐ ์์๊ฐ ๋จผ์ ๋์ค๋ ๊ตฌ์กฐ์ด๋ค.
Front
/Head
: ํ์์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋ ์์นRear
/Tail
: ํ์์ ๋ง์ง๋ง ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋ ์์น
enQueue
: ํ์ rear์ ์์ ์ฝ์deQueue
: ํ์ front์ ์๋ ์์ ์ญ์ ๋ฐ ๋ฐํ
- Array๋ฅผ ํตํด ๊ตฌํํ Queue
- Singly Linked List๋ฅผ ํตํด ๊ตฌํํ Queue
- ์ ์ฝ๋ ์คํ : QueueExample.java
Java์์ API๋ก Queue๋ฅผ ์ฌ์ฉํ ๋, java.util.Queue๋ ์ธํฐํ์ด์ค์ด๋ฉฐ, ๊ทธ ๊ตฌํ์ฒด๋ก java.util.LinkedList๋ฅผ ์ฌ์ฉํ๋ค. ๋ฐ๋ผ์
Queue<String> queue = new LinkedList<String>()
๋ก ์ ์ธํด์ผ ํ๋ค.
- ๋ฐ์ดํฐ ์ฝ์ /์ญ์ : O(1)
- front ๋ฐ์ดํฐ ์กฐํ : O(1)
- ํน์ ๋ฐ์ดํฐ ์กฐํ : O(n)
- ํ๋ก์ธ์ค ๋ ๋ ํ
- ์ค์ผ์ฅด๋ง
- ์บ์(Cache) ๊ตฌํ
- ๋คํธ์ํฌ ํจํท ์ ์ก์ ํ์ํ ๋ฒํผ ๋๊ธฐ ํ
- javascript์ Event Loop ๊ด๋ฆฌ (๋น๋๊ธฐ ์ฒ๋ฆฌ)
- ํค๋ณด๋ ๋ฒํผ
- ํ๋ฆฐํฐ์ ์ถ๋ ฅ ์ฒ๋ฆฌ
- ๋๋น ์ฐ์ ํ์(BFS, Breadth-First Search)
์๋ฃ๋ค ์ฌ์ด์ ๊ณ์ธต์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ๋ก ๋ถ๋ชจ-์์ ๊ด๊ณ๋ก ํํ๋๋ค.
- ๋น์ ํ ์๋ฃ๊ตฌ์กฐ
- ํธ๋ฆฌ๋ ๋ค์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
- ๋ฃจํธ ๋ ธ๋(root node)๊ฐ ์กด์ฌํ๋ค. (โ ํธ๋ฆฌ๋ ๋ฐ๋์ 1๊ฐ ์ด์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ค.)
- ํธ๋ฆฌ์ ๋ถ๋ถ ํธ๋ฆฌ(sub tree) ๋ํ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅธ๋ค.
- ๋ฃจํธ ๋ ธ๋ (Root Node) : ํธ๋ฆฌ์ ์ต์์ ๋ ธ๋. unique
- ๋ถ๋ชจ ๋ ธ๋ (Parent Node) : ๋ถ๋ชจ-์์ ๊ด๊ณ์์ ์์ ๊ณ์ธต์ ๋ ธ๋
- ์์ ๋ ธ๋ (Child Node) : ๋ถ๋ชจ-์์ ๊ด๊ณ์์ ํ์ ๊ณ์ธต์ ๋ ธ๋
- ํ์ ๋ ธ๋ : ๋ถ๋ชจ๊ฐ ๋์ผํ ๋ ธ๋
- ์กฐ์ ๋ ธ๋ : ํด๋น ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋ ~ ๋ฃจํธ ๋ ธ๋๊น์ง ๊ฐ๋ ๊ฒฝ๋ก์ ์กด์ฌํ๋ ๋ชจ๋ ๋ ธ๋๋ค
- ํ์ ๋ ธ๋ : ํด๋น ๋ ธ๋๋ฅผ ๋ฃจํธ๋ก ํ๋ ๋ถ๋ถ ํธ๋ฆฌ(sub tree)์ ์๋ ๋ชจ๋ ๋ ธ๋๋ค
- ๋ด๋ถ ๋ ธ๋ (internal/nonterminal node) : ์์์ด ์๋ ๋ ธ๋
- ์ธ๋ถ ๋ ธ๋ (๋จ๋ง ๋ ธ๋, ์์ ๋ ธ๋, leaf/external/terminal node) : ์์์ด ์๋ ๋ ธ๋
- ๊น์ด (Depth) : ๋ฃจํธ ๋
ธ๋์์ ํด๋น ๋
ธ๋๊น์ง ๋๋ฌํ๋๋ฐ ์ฌ์ฉํ๋ ๊ฐ์ ์ ๊ฐ์
- ๋ฃจํธ ๋ ธ๋์ ๊น์ด๋ 0
- ๋ ๋ฒจ (Level) : ๋ ธ๋์ ๊น์ด(depth) + 1
- ๋์ด (Height) : ๋ฃจํธ ๋
ธ๋์์ ํด๋น ๋
ธ๋๊น์ง ๋๋ฌํ๋๋ฐ ์ง๋๊ฐ ์ ์ ์ ๊ฐ์
- ํธ๋ฆฌ์ ๋์ด : ํด๋น ํธ๋ฆฌ ๋ด ๋ชจ๋ ๋ ธ๋์ ๋์ด ์ค ์ต๋๊ฐ
- ๋
ธ๋์ ์ฐจ์ (Degree) : ๋
ธ๋์ ์์ ์
- ํธ๋ฆฌ์ ์ฐจ์ : ํด๋น ํธ๋ฆฌ ๋ด ๋ชจ๋ ๋ ธ๋์ ์ฐจ์ ์ค ์ต๋๊ฐ
- ๋ ธ๋ ์ฝ์ : O(1)
- ๋ ธ๋ ์ญ์ : O(1)
- ๋ ธ๋ ๊ฒ์: O(N)
๋ ธ๋ ์ญ์ ์ ๊ฒฝ์ฐ, ์ธ์ด์ ๊ตฌํ์ ๋ฐ๋ผ ์๊ฐ๋ณต์ก๋๊ฐ ๋ฌ๋ผ์ง ์ ์์. ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฒฝ์ฐ ๊ฐ๋น์ง ์ฝ๋ ์ ์ ์ํด ์ฐธ์กฐ๋ฅผ ์ญ์ ํ๋ ๋ฐฉ์์ผ๋ก O(1)์ ๊ตฌํํ ์ ์์.
- HTML DOM ํธ๋ฆฌ
- ํ์ผ ์์คํ
- DBMS
- ๊ฒ์ ์์ง
- ํธ๋ผ์ด ์๊ณ ๋ฆฌ์ฆ
ํธ๋ฆฌ์ ์ฐจ์๊ฐ 2 ์ดํ์ธ ํธ๋ฆฌ์ด๋ค.
- ๋น์ ํ ์๋ฃ๊ตฌ์กฐ
- ์์์ด ์ต๋ 2๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์์์ ์ผ์ชฝ ์์๊ณผ ์ค๋ฅธ์ชฝ ์์์ผ๋ก ๊ตฌ๋ถํ๋ค.
- ๋์ด๊ฐ
N
์ธ ์ด์ง ํธ๋ฆฌ์ ์ต๋ ๋ ธ๋ ๊ฐ์๋ ๊ฐ ์ด๋ค.
- ์ ์ด์ง ํธ๋ฆฌ (Fully Binary Tree) : ๋ชจ๋ ๋ ธ๋์ ์ฐจ์๊ฐ 0 ๋๋ 2์ธ ์ด์งํธ๋ฆฌ
- ํฌํ ์ด์ง ํธ๋ฆฌ (Perfect Binary Tree) : ์ ์ด์ง ํธ๋ฆฌ์์ ๋ชจ๋ ์ธ๋ถ ๋ ธ๋(leaf node)์ ๊น์ด๊ฐ ๊ฐ์ ์ด์ง ํธ๋ฆฌ
- ์์ ์ด์ง ํธ๋ฆฌ (Complete Binary Tree) : ๋ง์ง๋ง ๋ ๋ฒจ์ ๋ ธ๋๊ฐ ์ผ์ชฝ์ ๋ชฐ๋ ค์๊ณ , ๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ๋ฉด ํฌํ ์ด์ง ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋๊ณ ์๋ ์ด์ง ํธ๋ฆฌ
- ์ฌํฅ ์ด์ง ํธ๋ฆฌ (Skewed Binary Tree) : linked list์ฒ๋ผ ํ ์ค๋ก ์ฐ๊ฒฐ๋์ด ์๋ ํํ์ ์ด์ง ํธ๋ฆฌ
ํ์ค์ธ๊ณ์ ์ฌ๋ฌผ์ด๋ ๊ฐ๋ ๊ฐ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ์ํ์ ๋ชจ๋ธ๋ก ๋จ์ํํ์ฌ ํํํ ๊ฒ
- V : ์ ์ (Vertex / Node)
- E : ๊ฐ์ (Edge / Link / Arc)
- ๊ทธ๋ํ G = (V, E)
- ์ ์ , ๋ ธ๋ (Vertex, Node)
- ๊ฐ์ (Edge)
- ๋ฌดํฅ ๊ฐ์ (Undirected Edge) : ๋ฐฉํฅ์ด ์กด์ฌํ์ง ์๋ ๊ฐ์ , ์๋ฐฉํฅ
- ์ ํฅ ๊ฐ์ (Directed Edge) : ๋ฐฉํฅ์ด ์กด์ฌํ๋ ๊ฐ์
- ์ธ์ (Adjacent) : (์ ์ ๊ด์ ) ๋ ์ ์ A, B ์ฌ์ด์ ๊ฐ์ ์ด ์กด์ฌํ๋ค๋ฉด A, B๋ ์ธ์ ํ๋ค.
- ๋ถ์ (Incident) : (๊ฐ์ ๊ด์ ) ๋ ์ ์ A, B ์ฌ์ด์ ๊ฐ์ e๊ฐ ์กด์ฌํ๋ค๋ฉด ๊ฐ์ e๋ ์ ์ A, B์ ๋ถ์ํ๋ค.
- ์ฐจ์ (Degree) : ํ ์ ์ ์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ์
- (๋ฐฉํฅ ๊ทธ๋ํ) in-degree : ์ ์ ์ ๋ค์ด์ค๋ ๊ฐ์ ์ ์, out-degree : ๋๊ฐ๋ ๊ฐ์ ์ ์
- ์๊ธฐ ๊ฐ์ ๊ณผ ๋ค์ค ๊ฐ์
- ์๊ธฐ ๊ฐ์ (Self-loop) : ์์ ์ผ๋ก ๋ค์ ๋์์ค๋ ๊ฐ์
- ๋ค์ค ๊ฐ์ (Multiple / Parallel edges) : ๋ ๊ฐ ์ด์์ ๊ฐ์ ์ด ๋๊ฐ์ ๋ ์ ์ ์ ๋ถ์ํ ๋
- ๊ฒฝ๋ก (Path) : ์ ์ + ๊ฐ์ ์ด ๊ต๋๋ก ๊ตฌ์ฑ๋ sequence
- ๋จ์ ๊ฒฝ๋ก (Simple Path) : ๊ฐ์ ์ ์ ์ ๋ ๋ฒ ์ด์ ๊ฐ์ง ์๋ ๊ฒฝ๋ก
- ํ๋ก (Cycle) : A ์ ์ ์์ ์ถ๋ฐํ์ ๋ ๋ค์ A ์ ์ ์ผ๋ก ๋์์ค๋ ๊ฒฝ๋ก
- ๋จ์ ํ๋ก (Simple Cycle) : ๊ฐ์ ์ ์ ์ ๋ ๋ฒ ์ด์ ๊ฐ์ง ์๋ ์ธ์ดํด
- ์ฐ๊ฒฐ๋จ (Connected) : ์ ์ A์์ ์ ์ B๋ก์ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ ๋ A์ B๋ ์ฐ๊ฒฐ๋์ด ์๋ค.
- ๋ฌดํฅ ๊ทธ๋ํ (Undirected Graph) : ๋ฌด๋ฐฉํฅ ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ทธ๋ํ
- ์ ํฅ ๊ทธ๋ํ (Directed Graph) : ๋ฐฉํฅ ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ทธ๋ํ
- ๊ฐ์ค์น ๊ทธ๋ํ (Weighted Graph) : ๊ฐ์ค์น(๋น์ฉ)๋ฅผ ๊ฐ๋ ๊ฐ์ ๋ค๋ก ์ด๋ฃจ์ด์ง ๊ทธ๋ํ
- ์ ๊ท ๊ทธ๋ํ (Regular Graph) : ๋ชจ๋ ์ ์ ์ด ๋์ผํ ์ฐจ์๋ฅผ ๊ฐ์ง๋ ๊ทธ๋ํ
- ์์ ๊ทธ๋ํ (Complete Graph) : ๋ชจ๋ ์ ์ ์ด ์๋ก ์ธ์ ํด์๋ ๊ทธ๋ํ, ์์ ๊ทธ๋ํ๋ ์ ๊ท ๊ทธ๋ํ
- ์ฐ๊ฒฐ ๊ทธ๋ํ (Connected Graph) : ๋ชจ๋ ์ ์ ์ด ์ฐ๊ฒฐ๋์ด ์์ด์ ๋ชจ๋ ์ ์ ๋ผ๋ฆฌ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๋ ๊ทธ๋ํ
- ๋ถ๋ถ ๊ทธ๋ํ : ์ด๋ค ๊ทธ๋ํ์ ๋ถ๋ถ ๋ถ๋ถ
- ํธ๋ฆฌ ๊ทธ๋ํ : ์ธ์ดํด์ ๊ฐ์ง์ง ์๋ ์ฐ๊ฒฐ ๊ทธ๋ํ, ๋ชจ๋ ์ ์ ์ ๋ํด์ ๊ฒฝ๋ก๊ฐ ์ ํํ 1๊ฐ ์กด์ฌํ๋ค.
๊ทธ๋ํ์ ํํ ๋ฐฉ์์๋ ๊ฐ์ ๋ฆฌ์คํธ, ์ธ์ ํ๋ ฌ, ์ธ์ ๋ฆฌ์คํธ 3๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
์ ์ ๊ฐ์ : V๊ฐ, ๊ฐ์ ๊ฐ์ : E๊ฐ
- E x 2 (or E x 3) ์ด์ฐจ์ ๋ฐฐ์ด A์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- ๋ ์ ์ x, y ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ์ k์ ๋ํด์ A[k][0] = x, A[k][1] = y
- ๊ฐ์ค์น ๊ทธ๋ํ์ ๊ฒฝ์ฐ A[k][2] ์ ๊ฐ์ค์น ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- V x V ์ด์ฐจ์ ๋ฐฐ์ด A์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- Vi, Vj๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ์ ์ด ์กด์ฌํ๋ค๋ฉด A[i][j] = 1, ์กด์ฌํ์ง ์๋๋ค๋ฉด A[i][j] = 0
- ๊ฐ์ค์น ๊ทธ๋ํ์ ๊ฒฝ์ฐ 1 ๋์ ๊ฐ์ค์น ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
๋ฉ๋ชจ๋ฆฌ ๋ณต์ก๋๊ฐ V2 ์ด๊ธฐ ๋๋ฌธ์ V์ ๊ฐ์ด ํด ๊ฒฝ์ฐ ์ฐ์ง ์๋ ๊ฒ์ด ์ข๋ค. 100 ์ดํ์ ๊ฐ์ผ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- V ๊ฐ์ Linked List๋ก ๊ทธ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- ๊ฐ์ค์น ๊ทธ๋ํ์ ๊ฒฝ์ฐ (์ ์ ์ ๋ณด, ๊ฐ์ค์น ์ ๋ณด)๋ฅผ ํจ๊ป ์ ์ฅํ๋ค. (C++ : pair, Java : class)
์ ์ ๊ฐ์ : V๊ฐ, ๊ฐ์ ๊ฐ์ : E๊ฐ
๊ฐ์ ๋ฆฌ์คํธ | ์ธ์ ํ๋ ฌ | ์ธ์ ๋ฆฌ์คํธ | |
---|---|---|---|
๊ณต๊ฐ | E | V2 | V + E |
์ ์ Va ์ ๋ถ์ ๊ฐ์ | E | V | Va ์ฐจ์ |
์ ์ Va, Vb ์ ์ธ์ ์ฌ๋ถ | E | 1 | min(Va ์ฐจ์, Vb ์ฐจ์) |
์ ์ ์ฝ์ | 1 | V2 | 1 |
๊ฐ์ ์ฝ์ | 1 | 1 | 1 |