본문 바로가기

알고리즘(Algorithm)/Data Structure

(5)
[자료구조] 그래프 그래프 그래프는 요소들이 서로 연결되어 있는 관계를 표현한 자료구조이다. 그래프는 정점(vertex)와 그들을 연결하는 간선(edge)의 집합으로 구성된다. 수학적으로는 다음과 같이 표시한다. (\G = (V, E)\) \(V(G)\)는 그래프 \(G\)의 정점의 집합, \(E(G)\)는 그래프 \(G\)의 간선의 집합 정점 A와 정점 B가 있다고 하면, 두 정점을 이어주는 간선은 (A, B)와 같이 정점의 쌍으로 나타낸다. 그래프는 정점과 간선의 집합이기 때문에, 한 그래프를 그리는 방법은 다양하다. 무방향 그래프(undirected graph) 간선에 방향이 표시되지 않은 그래프이다. 두 정점 A, B에 대하여 간선 (A, B)와 (B, A)는 동일한 간선이 된다. 현실의 것과 비유하자면, 지하철 노..
[자료구조] 우선순위 큐와 힙 우선순위 큐(Priority Queue) 우선순위 큐의 큐는 먼저 들어온 데이터가 먼저 나가는, 그 큐가 맞다. 둘의 차이점이라면, 우선순위 큐는 우선순위가 높은 데이터가 먼저 출력되는 것이 차이다. 아래와 같은 배열이 있다고 하자. Array arr[10] = { 1, 3, 4, 9, 6, 2, 7, 8, 10, 5 }; Priority_Queue pq[10]; 이 배열을 우선순위 큐(pq)에 저장된다고 하자. 큰 수에 우선순위가 주어진다고 하면, pq에는 아래와 같이 저장된다. Priority_Queue pq[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; 입력은 1, 3, 4, ..., 10, 5 순으로 되었지만, 우선순위 큐에는 큰 수부터 나열되어있다. 즉, 높은 우선순위..
[자료구조] 트리 트리 트리는 스택, 큐 등의 선형적인 자료구조가 아니라, 계층적인 구조의 자료구조이다. 컴퓨터의 폴더 구조, 가계도, 회사의 조직도 등 계층적인 관계들을 표현한 자료구조이다. 이 외에도 인공지능에서 사용되는 결정 트리도 트리라고 할 수 있겠다. 트리는 위의 그림과 같이, 1개 이상의 노드로 이루어져 있다. 트리 용어 노드(Node) : 트리를 구성하는 요소들로 그림에서 A, B, C, D, E, F, G, H, I 를 말한다. 루트(Root) 노드 : 트리에서 가장 높은 곳에 있는 노드. 위 그림에서 A가 루트 노드이다. 서브 트리(Subtree) : 루트 노드에서 갈라져 나온 트리. 간선(Edge) : 루트와 서브트리 사이에 연결된 선. 부모 노드(Parent node) : 자식 노드와 직접 연결된 상..
[자료구조] 큐 큐 자료의 입력과 출력이 FIFO(First In First Out)의 형태를 띄는 자료구조이다. LIFO의 스택과는 달리, 먼저 들어간 자료가 먼저 출력된다. 입력은 뒤(rear)에서, 출력은 앞(front)에서 일어난다. 줄을 서서 차례를 기다릴 때를 생각해보자. 앞에 있는 사람의 뒤에 줄을 서 차례를 기다리다가, 앞 사람이 빠져야 나의 차례가 되는 것과 같다. 큐에는 선형 큐와 원형 큐가 있다. 선형 큐는 구현하기는 쉽지만, front와 rear가 배열의 끝에 도달하게 된다면? 더 이상 사용할 수 없게 된다. 배열 앞부분에 값이 남는 데도! 이 방식을 해결하려면 요소들을 앞으로 당기거나 하는 번거로움이 필요하다. 이 문제를 해결한 것이 원형 큐이다. 원형 큐에서는 front는 항상 맨 앞 요소의 앞..
[자료구조] 스택 스택 자료의 입력과 출력이 LIFO(Last In First Out : 후입선출)의 형태를 띄는 자료 구조이다. 마지막으로 입력된 자료가 먼저 나오게 된다는 말이다. 스택에서는 맨 윗부분(top)에서만 입출력이 가능하고, 중간에서는 불가능하다. 책을 상자에 넣을 때 차곡차곡 쌓다가, 중간에 있는 책을 꺼낼 때는 위에서 부터 꺼낸다고 생각하면 된다. 아래는 스택의 연산들이다. init() : 스택을 초기화한다. is_empty() : 스택이 비어있는지 확인한다. is_full() : 스택이 가득 차 있는지 확인한다. size() : 스택에 저장된 요소들의 수를 반환한다. push(x) : x를 스택의 맨 윗부분에 추가한다. pop() : 스택의 맨 윗부분에 있는 요소를 삭제하고 반환한다. peek() : ..