Data structure
์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ ์๋ฒฝ ์ ๋ฆฌ (์ถ์ ๋น๋: ์)
์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ ๊ฐ๋
์๋ฃ๊ตฌ์กฐ๋?
- ๋ ผ๋ฆฌ์ ์ผ๋ก ์ค๊ณ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ
- ๊ตฌ์กฐ์ ์ผ๋ก ๋ชจ์ฌ์๋ ๋ฐ์ดํฐ์ ์งํฉ
- ๋ฐ์ดํฐ ์ ํ๊ณผ ์ ๋ฌด ์ํฉ์ ๋ฐ๋ผ ์ ํํด์ ํ์ฉ
์๋ฃ๊ตฌ์กฐ์ ํน์ง
- ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ตฌ์ฑ ๋ฐฉ์์ด ์ฑ๋ฅ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นจ
- ๋ฐ์ดํฐ ์ฉ๋๊ณผ ์คํ์๊ฐ์ ์ต์ํํ๋ ๊ฒ์ด ๋ชฉํ
- ์ถ๊ฐ, ์ญ์ , ํ์์ ํจ์จ์ ์ผ๋ก ์ฐ์ฐํ๋๋ก ์ค๊ณ ํ์
์๋ฃ๊ตฌ์กฐ์ ์ ํ
1. ๋จ์๊ตฌ์กฐ
- ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฅผ ํ์ฅํ์ฌ ์๋ฃ๊ตฌ์กฐ ๊ตฌ์ฑ
2. ์ ํ๊ตฌ์กฐ
- ๋ฐ์ดํฐ ๊ฐ 1:1 ๋์ ๊ด๊ณ๋ก ๊ตฌ์ฑ
- ๊ตฌ๋ถ:
- ์์ฐจ๊ตฌ์กฐ: ํ์์๋ ์ฐ์
- ์ฐ๊ฒฐ๊ตฌ์กฐ: ์ด๋(์ฝ์ , ์ญ์ ) ์๋ ์ฐ์
- ์ข ๋ฅ: ์คํ, ํ, ๋ฐํฌ, ์ ํ ๋ฆฌ์คํธ, ์ฐ๊ฒฐ ๋ฆฌ์คํธ
3. ๋น์ ํ๊ตฌ์กฐ
- 1:N, N:M ๊ตฌ์กฐ
- ์ข ๋ฅ: ํธ๋ฆฌ, ๊ทธ๋ํ
4. ํ์ผ๊ตฌ์กฐ
- ์ค์ ๋ฐ์ดํฐ ๊ธฐ๋ก ์ ํ์ฉ
- ์ข ๋ฅ: ์์ฐจ ํ์ผ, ์ง์ ํ์ผ, ์์ธ ์์ฐจ ํ์ผ
์๊ณ ๋ฆฌ์ฆ
์ ์
- ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํจ์จ์ ์ธ ํด๋ฒ
- ์๊ณ ๋ฆฌ์ฆ + ๋ฐ์ดํฐ๊ตฌ์กฐ = ํ๋ก๊ทธ๋จ
์๊ณ ๋ฆฌ์ฆ ์์น
- ์ถ๋ ฅ์ ๋ฐ๋์ 1๊ฐ ์ด์ ์กด์ฌ
- ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ช ํํ ์๋ฏธ์ ์๋ฒฝํ ๊ตฌ์ฑ์ ๊ฐ์ง
- ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ํด์ง ํ์๋งํผ ๋ฐ๋ณต๋๋ฉฐ ์ค์ ์ฐ์ฐ ๊ฐ๋ฅํด์ผ ํจ
์๊ณ ๋ฆฌ์ฆ ์ฑ๋ฅ ํ๋จ ๊ธฐ์ค
- ์ ํ์ฑ
- ๋ช ํ์ฑ
- ์ํ๋(์ฐ์ฐ์ ์ํ ํ์)
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
์๊ณ ๋ฆฌ์ฆ ํํ ๋ฐฉ๋ฒ
- ์์๋(Flow Chart)
- ๋ํ๊ณผ ๊ธฐํธ๋ก ํํ
- ์์ฌ์ฝ๋(Pseudo Code)
- ์ผ๋ฐ์ ์ธ ์ธ์ด๋ก ์ฝ๋์ ์ ์ฌํ๊ฒ ํํ
์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ๊ธฐ๋ฒ
- ๋์ ๊ณํ๋ฒ
- ์์ ๋ฌธ์ ์ ํด๊ฒฐ๋ฒ์ ํ์ฉํ์ฌ ํฐ ๋ฌธ์ ํด๊ฒฐ
- ํ์์ ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ ๋ถ๊ธฐ์์ ์ต์ ์ ํด ์ ํ
- ์ ์ฒด์ ์ธ ์ต์ ํด๋ฅผ ๋ณด์ฅํ์ง๋ ์์
- ์ฌ๊ท์ ์๊ณ ๋ฆฌ์ฆ
- ๋์ผํ ํ์ด๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถ
- ๊ทผ์ฌ ์๊ณ ๋ฆฌ์ฆ
- ๋น ๋ฅธ ๊ณ์ฐ์ ์ํด ๊ทผ์ฌ ํด๋ฒ ์ํ
- ๋ถํ ์ ๋ณต๋ฒ
- ๋ฌธ์ ๋ฅผ ์์ ๋จ์๋ก ๋ถํ ํ์ฌ ํด๊ฒฐ
- ํด๊ฐ ๊ฒ์๋ฒ
- ํ์ ์คํจ ์ ์ด์ ์ฑ๊ณต ๋ถ๊ธฐ๋ก ๋๋์๊ฐ๋ ๋ฐฉ์
- ์์: ๊น์ด ์ฐ์ ํ์ ์๊ณ ๋ฆฌ์ฆ(DFS)
์ ํ๊ตฌ์กฐ ์์ธ ์ค๋ช
์คํ(Stack)
- ๋ฐ์ดํฐ ์ ์ถ๋ ฅ์ด ํ์ชฝ์์๋ง ๋ฐ์
- ํน์ง: ํ์ ์ ์ถ(LIFO: Last In First Out)
- ์ฃผ์ ๊ฐ๋
:
- ์คํ ํฌ์ธํฐ(TOP): ์์น ์ ๋ณด ์ ์ฅ
- PUSH(์ฝ์ ): Overflow ๋ฐ์ ๊ฐ๋ฅ
- POP(์ถ์ถ): Underflow ๋ฐ์ ๊ฐ๋ฅ
- ํ์ฉ: 0 ์ฃผ์ ๋ช ๋ น์ด ๋ฐฉ์
์์ ํ๊ธฐ๋ฒ
- ์ ์์: +AB
- ์ค์์: A+B
- ํ์์: AB+
์์: (A-B)*C+D
์ ์์ ๋ณํ: -AB โ *-ABC โ +*-ABCD
ํ์์ ๋ณํ: AB- โ AB-C* โ AB-C*D+
ํ(Queue)
- ๋ฐ์ดํฐ ์ ์ถ๋ ฅ์ด ๋ฐ๋์ชฝ์์ ๋ฐ์
- ํน์ง: ์ ์ ์ ์ถ(FIFO: First In First Out)
- ํฌ์ธํฐ:
- Rear(์ฝ์ ): ๋ง์ง๋ง ์ฝ์ ๋ฐ์ดํฐ ์์น
- Front(์ญ์ ): ์ฒ์ ์ฝ์ ๋ ๋ฐ์ดํฐ ์์น
- ์ด๊ธฐ๊ฐ: -1
- ํ์ฉ: ๋๊ธฐํ๋ ฌ ์ฒ๋ฆฌ
๋ฐํฌ(Deque)
- ์ ์ถ๋ ฅ์ด ์์ชฝ์์ ๊ฐ๋ฅํ ์๋ฐฉํฅ ํ
- ํฌ์ธํฐ: Left, Right
- ์ ๋ ฅ๋ฐฉ์: ์คํฌ๋กค ๋ฐฉ์
- ์ถ๋ ฅ๋ฐฉ์: ์ํ ๋ฐฉ์
์ ํ๋ฆฌ์คํธ
- ํน์ง:
- ์ฐ์๋ ๊ณต๊ฐ์ ์ ์ฅ
- ๋น ๋ฅธ ์ ๊ทผ ์๋
- ๋๋ฆฐ ์ฝ์ /์ญ์ ์๋
- ๋ํ์ ํ: ๋ฐฐ์ด
- ๋ฐฐ์ด ํน์ง:
- ์ฐ์์ ๋ฐ์ดํฐ ๋์ด
- Index๋ก ์์น ๊ตฌ๋ถ
- ๊ณ ์ ํฌ๊ธฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
- ๋ ผ๋ฆฌ์ /๋ฌผ๋ฆฌ์ ์์ ๋์ผ
- ์ฐ์ฐ ํจ์จ:
- ์ถ๊ฐ ํ๊ท ์ด๋: (N+1)/2
- ์ญ์ ํ๊ท ์ด๋: (N-1)/2
์ฐ๊ฒฐ๋ฆฌ์คํธ
- ๊ตฌ์ฑ: ๋ ธ๋(๋ฐ์ดํฐ + ํฌ์ธํฐ)
- ์ข
๋ฅ:
- ๋จ์ผ ์ฐ๊ฒฐ๋ฆฌ์คํธ
- ๋จ์ผ ํฌ์ธํฐ๋ก ๋ค์ ์์น ์ฐธ์กฐ
- ๋ง์ง๋ง ํฌ์ธํฐ๋ Null
- ์ฒซ ๋ ธ๋๋ถํฐ ํ์
- ๋จ์ผ ์ํ ์ฐ๊ฒฐ๋ฆฌ์คํธ
- ๋ง์ง๋ง ๋ ธ๋๊ฐ ์ฒซ ๋ ธ๋ ์ฐธ์กฐ
- ์ํ ํ์ ๊ฐ๋ฅ
- ์ด์ค ์ฐ๊ฒฐ๋ฆฌ์คํธ
- ์ /ํ ๋ ธ๋ ์์น ์ฐธ์กฐ
- ์๋ฐฉํฅ ํ์ ๊ฐ๋ฅ
- ๋ฐ์ดํฐ ๋ณต๊ตฌ ๊ฐ๋ฅ
- ์ด์ค ์ํ ์ฐ๊ฒฐ๋ฆฌ์คํธ
- ์๋ฐฉํฅ ํ์
- ์ํ ๊ตฌ์กฐ
- ๋ฐ์ดํฐ ๋ณต๊ตฌ ๊ฐ๋ฅ
- ๋จ์ผ ์ฐ๊ฒฐ๋ฆฌ์คํธ
๋น์ ํ๊ตฌ์กฐ ์์ธ ์ค๋ช
ํธ๋ฆฌ(Tree)
- 1:N ๊ณ์ธต ๊ตฌ์กฐ
- ํน์ง:
- ๊ฐ์ (Edge, Branch)์ผ๋ก ์ฐ๊ฒฐ
- N๊ฐ ๋ ธ๋ ํธ๋ฆฌ์ ๊ฐ์ ์: N-1
- ๋ฐฉํฅ์ฑ ์๋ ๋น์ํ ๊ทธ๋ํ
์ฃผ์ ์ฉ์ด
- ๊ทผ(Root) ๋ ธ๋
- ๋จ๋ง(Leaf) ๋ ธ๋
- ๋ด๋ถ(Internal) ๋ ธ๋
- ํ์ (Sibling) ๋ ธ๋
๊ตฌ์กฐ ๊ด๋ จ ์ฉ์ด
- ๋ ธ๋์ ํฌ๊ธฐ
- ๋ ธ๋์ ๊น์ด
- ๋ ธ๋์ ๋์ด
- ํธ๋ฆฌ์ ๋์ด
- ๋ ธ๋์ ๋ ๋ฒจ
- ๋ ธ๋์ ์ฐจ์
- ํธ๋ฆฌ์ ์ฐจ์
์ด์งํธ๋ฆฌ ์ข ๋ฅ
- ์ ์ด์งํธ๋ฆฌ
- ํ์ ๋ ธ๋๊ฐ 0๊ฐ ๋๋ 2๊ฐ
- ์์ ์ด์งํธ๋ฆฌ
- ๋ง์ง๋ง ๋ ๋ฒจ ์ ์ธ ๋ชจ๋ ํ์ ๋ ธ๋๊ฐ 2๊ฐ
- ์์๋๋ก ์ฑ์์ง ๊ตฌ์กฐ
- ํฌํ ์ด์งํธ๋ฆฌ
- ๋ชจ๋ ํ์ ๋ ธ๋๊ฐ 2๊ฐ
ํธ๋ฆฌ ์ํ ๋ฐฉ์
- ์ค์ ์ํ
- ์ข์ธก์์ โ ๋ถ๋ชจ โ ์ฐ์ธก์์
- G -> D -> H -> B -> E -> A -> F -> C
- ์ ์ ์ํ
- ๋ถ๋ชจ โ ์ข์ธก์์ โ ์ฐ์ธก์์
- A -> B -> D -> G -> H -> E -> C -> F
- ํ์ ์ํ
- ์ข์ธก์์ โ ์ฐ์ธก์์ โ ๋ถ๋ชจ
- G -> H -> D -> E -> B -> F -> C -> A
๊ทธ๋ํ(Graph)
- N:M ๋ค๋๋ค ๊ตฌ์กฐ
- ํน์ง:
- ๋ค์ค ๊ฒฝ๋ก ์ค์ ๊ฐ๋ฅ
- ๋ ๋ฆฝ๋ ๋ถ๋ถ ๊ทธ๋ํ ๊ตฌ์ฑ ๊ฐ๋ฅ
- ์ํ ๊ฐ๋ฅ
๊ทธ๋ํ ์ข ๋ฅ
- ๋ฐฉํฅ์ฑ: ๋ฐฉํฅ/๋ฌด๋ฐฉํฅ ๊ทธ๋ํ
- ๋ ธ๋ ์ฐ๊ฒฐ: ๋ถ๋ถ/์์ ๊ทธ๋ํ
- ํน์ ๋ ธ๋ ์ฐ๊ฒฐ: ์ฐ๊ฒฐ/๋น์ฐ๊ฒฐ ๊ทธ๋ํ
- ์ํ์ฑ: ์ํ/๋น์ํ ๊ทธ๋ํ
- ๊ฐ์ค์น: ๊ฐ์ค์น/๋น๊ฐ์ค์น ๊ทธ๋ํ
์ฃผ์ ์ฉ์ด
- ์ ์ (Vertex)
- ๊ฐ์ (Edge, Branch)
- ์ธ์ ์ ์ (Adjacent Vertex)
- ์ฌ์ดํด
- ๋จ์ ๊ฒฝ๋ก(Simple Path)
๊ตฌ์กฐ ๋ถ์ ๊ฐ๋
- ์ ์ ์ ์ฐจ์(Degree)
- ์ง์ ์ฐจ์(In-Degree)
- ์ง์ถ ์ฐจ์(Out-Degree)
- ๊ฒฝ๋ก ๊ธธ์ด(Path Length)
๋ฐฉํฅ ๊ทธ๋ํ
- ๋ฐฉํฅ์ฑ ์กด์ฌ
- <A,B>์ <B,A>๋ ๋ค๋ฅธ ํํ
- ์ต๋ ๊ฐ์ ์: n(n-1)
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ
- ๋ฐฉํฅ์ฑ ์์
- (A,B)์ (B,A)๋ ๋์ผ ํํ
- ์ต๋ ๊ฐ์ ์: n(n-1)/2