자료ꡬ쑰

자료ꡬ쑰 정리

PYT 2021. 8. 9. 02:05
λ°˜μ‘ν˜•

κΈ°λ³Έ 자료ꡬ쑰 μ’…λ₯˜

μ„ ν˜• 자료ꡬ쑰 (linaer)

- λ°°μ—΄ (Array)

- μ—°κ²°λ¦¬μŠ€νŠΈ (Linked List)

- μŠ€νƒ (Stack)

- 큐 (Queue)

 

λΉ„μ„ ν˜• 자료ꡬ쑰 (non-linear)

- 트리 (Tree)

- κ·Έλž˜ν”„ (Graph)


1. λ°°μ—΄

1) μ •μ˜

같은 μžλ£Œν˜•μ„ κ°–λŠ” μ—¬λŸ¬ 데이터λ₯Ό ν•˜λ‚˜μ˜ λ³€μˆ˜ μ΄λ¦„μœΌλ‘œ λͺ¨μ•„놓은 λ°μ΄ν„°μ˜ 집합체

 

2) νŠΉμ§•

- λ…Όλ¦¬μ μˆœμ„œμ™€ 물리적 μˆœμ„œκ°€ κ°™λ‹€.

- 인덱슀λ₯Ό 톡해 μ§μ ‘μ μœΌλ‘œ μ›μ†Œμ— μ ‘κ·Όν•œλ‹€.

- μ‚½μž…, μ‚­μ œ μ‹œ 자료의 이동에 λ”°λ₯Έ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— μ‚½μž…/μ‚­μ œ 연산이 λΉˆλ²ˆν•˜κ²Œ μΌμ–΄λ‚˜λŠ” μ—°μ‚°μ—μ„œλŠ” λΆ€μ ν•©ν•˜λ‹€.

 

2. μ—°κ²°λ¦¬μŠ€νŠΈ

1) μ •μ˜

λ…Έλ“œ (ν•˜λ‚˜ μ΄μƒμ˜ 데이터 ν•„λ“œμ™€ ν•˜λ‚˜ μ΄μƒμ˜ 링크 ν•„λ“œλ‘œ ꡬ성)λΌλŠ” μ €μž₯ꡬ쑰λ₯Ό μ΄μš©ν•΄μ„œ μ„ ν˜• 리슀트λ₯Ό ν‘œν˜„ν•˜λŠ” 방법

 

2) νŠΉμ§•

- λ…Όλ¦¬μ μˆœμ„œμ™€ λ¬Όλ¦¬μ μˆœμ„œκ°€ 같지 μ•Šλ‹€.

- 링크 ν•„λ“œμ˜ 쑰정을 톡해 배열보닀 비ꡐ적 κ°„λ‹¨ν•˜κ²Œ μ‚½μž…/μ‚­μ œ 연산을 ν•  수 μžˆλ‹€.

- μˆœμ°¨μ ‘κ·Όμ„ ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— κ²€μƒ‰μ‹œ λ°°μ—΄λ³΄λ‹€λŠ” 효율이 λ–¨μ–΄μ§€λŠ” νŽΈμ΄λ‹€.

 

3) μ’…λ₯˜

- 단일 μ—°κ²°λ¦¬μŠ€νŠΈ (Singly Linked List) : λ…Έλ“œκ°€ ν•œλ°©ν–₯으둜만 갈 수 있음, λ…Έλ“œμ˜ 끝이 있음

- 이쀑 μ—°κ²°λ¦¬μŠ€νŠΈ (Doubly Linked List) : 각 λ…Έλ“œκ°€ 이전 λ…Έλ“œ, λ‹€μŒ λ…Έλ“œμ— λŒ€ν•΄μ„œ μ°Έμ‘°ν•˜λŠ” ν˜•νƒœμ˜ μ—°κ²° 리슀트

 

- 단일 μ—°κ²° 리슀트 : λ…Έλ“œκ°€ ν•œλ°©ν–₯으둜만 갈 수 있음, λ…Έλ“œμ˜ 끝이 μ—†μ–΄ μ–‘ λ…Έλ“œμ˜ 끝이 처음으둜 μ΄μ–΄μ§ˆ 수 있음

- 이쀑 μ—°κ²° 리슀트 : λ…Έλ“œκ°€ μ–‘λ°©ν–₯으둜 갈 수 있음, λ…Έλ“œμ˜ 끝이 μ—†μ–΄ μ–‘ λ…Έλ“œμ˜ 끝이 처음으둜 μ΄μ–΄μ§ˆ 수 있음

 


3. μŠ€νƒ

1) μ •μ˜ 

ν•œμͺ½ λμ—μ„œλ§Œ λ°μ΄ν„°μ˜ μ‚½μž…κ³Ό μ‚­μ œκ°€ μˆ˜ν–‰λ˜λŠ” μ„ ν˜• 리슀트

 

2) νŠΉμ§•

- κ°€μž₯ 늦게 λ“€μ–΄κ°„ 데이터가 κ°€μž₯ λ¨Όμ € λ‚˜μ˜€λŠ” ν›„μž…μ„ μΆœ (LIFO) 의 ν˜•μ‹μ„ 가진닀.

- 데이터λ₯Ό μ‚½μž…ν•˜λŠ” push μ—°μ‚°κ³Ό 데이터λ₯Ό 좜λ ₯ν•˜λŠ” pop 연산이 μžˆλ‹€.

- TOPμ—μ„œλ§Œ λ°μ΄ν„°μ˜ μ‚½μž…κ³Ό μ‚­μ œκ°€ μˆ˜ν–‰λœλ‹€.

 

4. 큐

1) μ •μ˜

ν•œμͺ½ λμ—μ„œλŠ” λ°μ΄ν„°μ˜ μ‚½μž…λ§Œ μˆ˜ν–‰λ˜κ³  λ‹€λ₯Έ ν•œμͺ½ λμ—μ„œλŠ” μ‚­μ œλ§Œ μˆ˜ν–‰λ˜λŠ” μ„ ν˜• 리슀트

 

2) νŠΉμ§•

- κ°€μž₯ λ¨Όμ € λ“€μ–΄κ°„ 데이터가 κ°€μž₯ λ¨Όμ € λ‚˜μ˜€λŠ” μ„ μž…μ„ μΆœ (FIFO) 의 ν˜•μ‹μ„ 가진닀.

- κ°€μž₯ μ•žλΆ€λΆ„μ„ front / head라고 ν•˜λ©°, κ°€μž₯ 뒷뢀뢄을 rear / tail이라고 ν•œλ‹€.


5-1. 트리

 

좜처 : https://www.newline.co/books/javascript-algorithms/binary-search-tree-bst

1) μ •μ˜

λ…Έλ“œλΌλŠ” 정보 ν•­λͺ©μ΄ κ°„μ„ μœΌλ‘œ μ—°κ²°λ˜μ–΄ 계측적인 ꡬ쑰λ₯Ό ν‘œν˜„ν•˜λŠ” λΉ„μ„ ν˜• 자료ꡬ쑰

 

2) μš©μ–΄

- μ„œλΈŒ 트리 (subtree) : ν•˜λ‚˜μ˜ λ…Έλ“œμ™€ κ·Έ λ…Έλ“œλ“€μ˜ μžμ†λ“€λ‘œ 이루어진 트리

 

- 루트 λ…Έλ“œ(root) : λΆ€λͺ¨κ°€ μ—†λŠ” λ…Έλ“œλ‘œ νŠΈλ¦¬λŠ” ν•˜λ‚˜μ˜ 루트 λ…Έλ“œλ§Œμ„ 가진닀.

- λ…Έλ“œμ˜ 차수 (degree) : ν•˜μœ„ 트리 갯수/κ°„μ„ μˆ˜ (degree)둜, 각 λ…Έλ“œκ°€ μ§€λ‹Œ κ°€μ§€μ˜ 수λ₯Ό λ§ν•œλ‹€.

- 리프 λ…Έλ“œ(leaf node), 단말 λ…Έλ“œ : μžμ‹μ΄ μ—†λŠ” λ…Έλ“œλ₯Ό λ§ν•œλ‹€.

- λΉ„λ‹¨λ§λ…Έλ“œ : 적어도 ν•˜λ‚˜μ˜ μžμ‹μ„ κ°€μ§€λŠ” λ…Έλ“œλ₯Ό λ§ν•œλ‹€.

 

- λΆ€λͺ¨ λ…Έλ“œ (parent) : 

- μžμ‹ λ…Έλ“œ (child) :

- ν˜•μ œ λ…Έλ“œ (sibling) : 같은 λΆ€λͺ¨λ₯Ό κ°€μ§€λŠ” λ…Έλ“œλ₯Ό λ§ν•œλ‹€.

- 후손(μžμ†, descendent) :

- 쑰상(μ„ μ‘°, ancestor) : 

- 레벨 : 루트 λ…Έλ“œλ‘œλΆ€ν„°μ˜ 길이

- 높이/깊이 (height, depth) : 루트 λ…Έλ“œμ—μ„œ κ°€μž₯ κΉŠμˆ™νžˆ μžˆλŠ” λ…Έλ“œμ˜ 깊이둜 'κ°€μž₯ λ§ˆμ§€λ§‰ 레벨 + 1'둜 ꡬ할 수 μžˆλ‹€. 

- 차수(degree) : λ…Έλ“œκ°€ 가지고 μžˆλŠ” μžμ‹ λ…Έλ“œμ˜ 개수

- 숲

 

5-2. μ΄μ§„νŠΈλ¦¬

1) μ •μ˜

각 λ…Έλ“œμ˜ μ°¨μˆ˜κ°€ 2μ΄ν•˜(0,1,2)인 μˆœμ„œ 트리

 

2) νŠΉμ§•

- 레벨 iμ—μ„œμ˜ μ΅œλŒ€  λ…Έλ“œ 개수: 2i

- 높이 h인 트리의 μ΅œλŒ€ λ…Έλ“œ 개수 : 2h - 1

- n0=n2+1 (n0: 단일 λ…Έλ“œμ˜ 수, n2: μ°¨μˆ˜κ°€ 2인 λ…Έλ“œμ˜ 수)

 

3) μ’…λ₯˜

- 포화(perfect) μ΄μ§„νŠΈλ¦¬ : λͺ¨λ“  리프 λ…Έλ“œμ˜ 레벨이 λ™μΌν•˜κ³  λͺ¨λ“  레벨이 가득 μ±„μ›Œμ Έ μžˆλŠ” 이진 트리λ₯Ό λ§ν•œλ‹€.

- μ™„μ „(complete) μ΄μ§„νŠΈλ¦¬ : λΆ€λͺ¨, μ™Όμͺ½ μžμ‹, 였λ₯Έμͺ½ μžμ‹ 순으둜 μ±„μ›Œμ§€λŠ” 트리λ₯Ό λ§ν•˜λ©°, λ§ˆμ§€λ§‰ λ ˆλ²¨μ„ μ œμ™Έν•˜κ³  λͺ¨λ“  λ…Έλ“œκ°€ 가득 μ°¨ μžˆμ–΄μ•Ό ν•œλ‹€. λ˜ν•œ, λ§ˆμ§€λ§‰ 레벨의 λ…Έλ“œλ„ 쀑간에 빈 κ³³ 없이 μ™Όμͺ½μœΌλ‘œ λͺ°λ € μžˆμ–΄μ•Ό ν•œλ‹€.

- μ „μ΄μ§„νŠΈλ¦¬ (full) : λ…Έλ“œμ°¨μˆ˜κ°€ 0 μ΄κ±°λ‚˜ 2인 μ΄μ§„νŠΈλ¦¬λ₯Ό λ§ν•˜λ©° κ· ν˜• μ΄μ§„νŠΈλ¦¬ (balanced)라고도 ν•œλ‹€.

 

 

 

 

6. κ·Έλž˜ν”„

1) μ •μ˜

G = (V, E)

V : 정점(μ—°κ²°ν•΄μ•Ό ν•  λŒ€μƒ)의 집합

E : κ°„μ„ (μ—°κ²°μ„ )의 집합 

 

2) μ’…λ₯˜

λ°©ν–₯μ„±μ˜ μœ„μΉ˜μ— 따라 무방ν–₯ κ·Έλž˜ν”„μ™€ λ°©ν–₯κ·Έλž˜ν”„λ‘œ κ΅¬λΆ„ν•œλ‹€.

 

무방ν–₯ κ·Έλž˜ν”„ (undirected)

(1,0) = (0,1)

λ°©ν–₯이 μ—†κΈ° λ•Œλ¬Έμ— μ–΄λ””λ“  κ°™μ•„ μ΄λŸ°μ‹μœΌλ‘œ() ν‘œν˜„ν•œλ‹€.

 

λ°©ν–₯κ·Έλž˜ν”„ (directed)

<1,2> =/= <2,1>
λ°©ν–₯이 있기 λ•Œλ¬Έμ— μ΄λ ‡κ²Œ<> ν‘œν˜„ν•˜λ©° 값이 λ§žμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ‘˜μ€ λ‹€λ₯΄λ‹€.

 

λ˜ν•œ κ°€μ€‘μΉ˜κ°€ μžˆμ„ 경우 κ°€μ€‘κ·Έλž˜ν”„(weighted)라고 ν•œλ‹€.

 

3) μš©μ–΄

- 인접(adjacent)

- λΆ€μˆ˜(incident)

- λΆ€λΆ„ κ·Έλž˜ν”„ (subgraph)

- 경둜(path)

- 경둜의 길이(length)

- 차수(degree)

   λ°©ν–₯ κ·Έλž˜ν”„ -> μ§„μž… 차수(in-degree), μ§„μΆœ μ§€μˆ˜(out-degree)

- λ‹¨μˆœ 경둜(simple path)

- 사이클(cycle)

- 루프(loop)

- μ—°κ²°(connected)

λ°©ν–₯κ·Έλž˜ν”„ -> κ°•λ ₯ μ—°κ²°(strongly-connected), μ•½ν•˜κ²Œ μ—°κ²°(weakly-connected)

 

4) κ·Έλž˜ν”„μ˜ κ΅¬ν˜„

 

인접행렬 (adjacency matrix) : 이쀑배열을 μ‚¬μš©ν•΄μ„œ κ΅¬ν˜„

λ§Œμ•½ κ°€μ€‘μΉ˜κ°€ μ—†λŠ” κ·Έλž˜ν”„μΌ 경우 선이 μžˆλƒ 없냐인 1,0으둜 κ΅¬μ„±λ˜μ–΄ ν‘œν˜„λ¨

μΈμ ‘λ¦¬μŠ€νŠΈ (adjacency list) : linkedList μ‚¬μš©ν•΄μ„œ κ΅¬ν˜„

λ°˜μ‘ν˜•