본문 바로가기

자료구조론

(13)
13. 자료구조론 - Hashing Hashing 해시 테이블은 특정 값을 삽입, 삭제, 탐색하는 것을 상수시간 내에 할 수 있게 해주는 자료구조입니다. 해시 테이블은 고정된 사이즈의 배열로 이루어져있고, 키값이 주어지면 해시 함수를 통해 배열의 인덱스로 맵핑됩니다. 이렇게 해시함수를 이용해 임의의 범위의 키값을 일정 범위 안으로 맵핑시켜 배열에 들어가도록 할 수 있습니다. 하지만 다른 키 값이더라도 해시함수에 통과시켰을 때 같은 값이 도출될 수 있는데, 이 경우 collision이 발생했다고 합니다. Collision의 해결 Collision을 해결하는 대표적인 두가지 방법이 있습니다. Separate chaining : 같은 인덱스로 맵핑되는 모든 키에 대한 값들을 리스트로 연결해두는 방법 Open addressing : 키가 충돌하면..
12. 자료구조론 - Dijkstra's algorithm 다익스트라 알고리즘은 가중치가 있는 그래프에서 한 정점으로부터 다른 모든 정점으로의 최단 거리를 구하는 알고리즘입니다. 이때 그래프의 가중치는 음수이면 안됩니다. 음수인 가중치가 있으면 계속 해당 간선을 지나며 무한한 음수가 될 수 있기 때문입니다. 알고리즘 다익스트라 알고리즘에서 그래프의 각 노드의 상태는 다음 두 가지 중 하나입니다. 최단거리가 결정된 노드 아직 최단거리가 구해지지 않은 노드 알고리즘의 진행을 간단히 살펴보면 다음과 같습니다. 시작 정점 S로부터 각 정점 V로 가는 최단거리를 의미하는 d[V]를 초깃값으로 초기화해놓는다. 이때 초깃값은 어떤 최단거리보다도 큰 임의의 최댓값으로 설정해야함. 시작 정점 S에서 연결된 노드들의 d[V]를 간선의 가중치로 업데이트해준다. 모든 노드v에 대해 ..
11. 자료구조론 - Graph(1) Intro, Topological Sort Graph 그래프는 여러 개의 정점(Vertex, node)들이 간선(Edge)으로 연결된 자료구조입니다. Directed graph : 방향이 있는 간선들로 이루어진 그래프 Undirected graph: 방향이 없는 간선들로 이루어진 그래프 방향이 있는 그래프 G = (V, E)가 다음과 같을 때, V = {1, 2, 3}, E = {(1, 2}, {2, 1}, {2, 3}, {3, 1}, {3, 3}} 이 됩니다. Directed graph G = (V, E)에서 edge(u, v)가 의미하는 바는 1. u가 v와 연결되어있고, 2. u가 initial vertex이고, 3. v는 terminal vertex 입니다. vertex에는 두 종류의 degree가 있습니다. vertex v의 in-deg..
10. 자료구조론 - B-Tree m-way search tree 앞 게시글에서는 계속해서 Binary 트리에 대해 다루었습니다. 06. 자료구조론 - 이진탐색트리 (Binary Search Tree) 이진탐색트리 (BST) 이진탐색트리는 이진트리의 일종으로, 트리의 노드들을 일정한 기준으로 정렬해놓아서 트리 내에서 원하는 노드를 쉽게 찾을 수 있도록 한 트리입니다. 이진탐색트리는 다음 coldyun.tistory.com 이진트리는 자식이 많아봐야 두개밖에 없기때문에 탐색 등의 연산을 빠르게 수행할 수 있습니다. 하지만 이진트리는 데이터베이스와 같이 디스크에 데이터를 저장하는 용도로 사용하기에는 적합하지 않은 자료구조입니다. 모든 데이터가 메인메모리에 들어있을 수는 없기 때문에 일부 데이터는 외부 디스크에 저장됩니다. 이때 디스크에 접근..
09. 자료구조론 - Heap (Priority Queue) Heap (Priority Queue) 힙 또는 우선순위 큐는 요소가 지워질 때 먼저 들어온 것이 먼저 나가는 것이 아니라 우선순위가 높은 요소가 더 먼저 나가는 자료구조입니다. 따라서 heap에서는 insert와 pop 연산을 지원하는데, 여기서 pop은 deleteMin이나 deleteMax같은 연산이 됩니다 . 우선순위 큐는 주로 스케줄링을 할 때 사용됩니다. Heap에는 min heap과 max heap이 있으며 둘의 차이는 다음과 같습니다. min heap : 각 부모노드의 값은 자식 노드의 값들보다 항상 작거나 같다. (작은 값이 우선순위가 높을 때 사용) max heap : 각 부모노드의 값은 자식 노드의 값들보다 항상 크거나 같다. (큰 값이 우선순위가 높을 때 사용) 따라서 루트노드는 m..
08. 자료구조론 - Disjoint Set Disjoint Set (서로소 집합) Disjoint set은 서로 공통된 요소를 가지지 않고 분리된 집합들을 관리하기 위한 자료구조입니다. Disjoint set 내의 집합 $S_i$, $S_j$ 에 대해서 $i != j$ 라면 $S_i$와 $S_j$ 에 공통으로 존재하는 요소는 없습니다. Disjoint set에서 수행할 수 있는 기본적인 연산에는 Union, Find가 있습니다. Union은 두 서로소 집합을 합치는 연산이고, Find는 원하는 요소가 어떤 서로소 집합에 있는지 찾는 연산입니다. Disjoint set은 거꾸로된 트리들을 통해 구성할 수 있습니다. 일반적인 트리는 부모가 자식을 가리키는 방향이라면, Disjoint set의 집합 하나를 이루는 트리는 자식이 부모를 가리키는 방향으로..
07. 자료구조론 - AVL Tree AVL (Adelson-Velskii and Landis) Tree AVL트리는 Binary search tree 의 일종입니다. 06. 자료구조론 - 이진탐색트리 (Binary Search Tree) 이진탐색트리 (BST) 이진탐색트리는 이진트리의 일종으로, 트리의 노드들을 일정한 기준으로 정렬해놓아서 트리 내에서 원하는 노드를 쉽게 찾을 수 있도록 한 트리입니다. 이진탐색트리는 다음 coldyun.tistory.com 일반적인 그냥 이진탐색트리는 랜덤한 값을 insert, delete할 경우 운이 나쁘면 치우친 트리가 생성될 수도 있습니다. 예를 들어 위와 같이 {1, 2, 3, 4}라는 값을 이진탐색트리에 넣는 경우, 이진탐색트리는 들어온 순서대로 알맞은 위치에 leaf노드로 해당 값을 삽입하기 때..
06. 자료구조론 - 이진탐색트리 (Binary Search Tree) 이진탐색트리 (BST) 이진탐색트리는 이진트리의 일종으로, 트리의 노드들을 일정한 기준으로 정렬해놓아서 트리 내에서 원하는 노드를 쉽게 찾을 수 있도록 한 트리입니다. 이진탐색트리는 다음과 같은 특징을 갖습니다. 트리 내의 모든 노드X에 대해서 1. X의 왼쪽 subtree에 있는 모든 값들은 X보다 작고, 2. X의 오른쪽 subtree에 있는 모든 값들은 X보다 크다. 3. 트리 내의 모든 노드의 값은 중복되지 않는다. 따라서 이진탐색트리에서 어떤 subtree를 떼어내더라도 그또한 이진탐색트리가 됩니다. 이진탐색트리에서 탐색을 빠르게 할 수 있다고 하였는데, 이에 앞서 linear array에서의 탐색에 대해 알아보겠습니다. 순차탐색 : 일반배열에 값을 정렬하지 않고 그냥 저장해놓고, 원하는 값을 ..