Algorithms Summary


여태까지 배운 알고리즘에 관한 내용을 총 정리해보자.


알고리즘 총정리

  Description Time Complexity
Binary Search 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 탐색 알고리즘. 중앙값을 기준으로 리스트를 이등분함 $O(\log n)$
K-ary Search 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 탐색 알고리즘. 중앙값을 기준으로 리스트를 $k$등분함 $O(\log_kn)$
BST Binary Search를 기반으로 연결리스트를 이용하여 원하는 값을 탐색하는 알고리즘. 트리순회 방식을 기반으로 노드와 탐색값의 크기를 비교하며 탐색함 $O(\log n)$
$O(n)$
AVL Tree BF를 기반으로 서브트리의 높이를 적절하게 제어해 균형을 맞춘 BST $O(\log n)$
B-Tree 자식노드의 개수가 2개 이상이며 한 노드 내에 데이터가 1개 이상인 트리 $O(\log n)$
Heap 완전이진트리의 일종으로, 데이터에서 최대/최소값을 빠르게 찾아내도록 만들어진 자료구조. 최대힙과 최소힙으로 구성됨 $O(\log n)$
Insertion Sort 배열의 앞에서부터 차례대로 이미 정렬된 앞부분과 비교하며 자신의 위치를 찾아 삽입하며 정렬하는 방법 $O(n)$
$O(n^2)$
Bubble Sort 서로 인접한 두 원소를 비교하여 크기 순서대로 정렬하는 방법. 여러 번의 회전을 통해 정렬이 이루어짐 $O(n^2)$
Selection Sort 최대/최소값을 찾은 뒤 맨 뒤/앞과 교환하며 정렬하는 방법. 여러 번의 회전을 통해 정렬이 이루어짐 $O(n^2)$
Merge Sort 데이터를 쪼갤 수 없을 때까지 쪼갠 뒤, 둘씩 크기를 비교해 정렬하며 합치는 방법 $O(n\log n)$
Quick Sort 리스트의 pivot을 선택한 뒤, pivot보다 작은 값과 큰 값으로 리스트를 둘로 분할하며 정렬하는 방법 $O(n\log n)$
$O(n^2)$
Heap Sort 데이터를 최대/최소힙 트리로 구성해 정렬하는 방법 $O(n\log n)$
DFS 하나의 시작 정점에서 출발해 더이상 나아갈 엣지가 없을 때까지 깊이 탐색하는 그래프 순회기법 $O(V+E)$
BFS 각 노드에 인접한 모든 노드를 우선 방문하는 그래프 순회기법 $O(V+E)$
Dijkstra 하나의 정점에서 다른 모든 정점까지의 최단경로를 구함 $O(E\log V)$
$O(V^2)$
Bellman-Ford 하나의 정점에서 다른 모든 정점까지의 최단경로를 구함. 음수 가중치를 갖는 간선에 이용할 수 있음 $O(V^3)$
Floyd-Warshall 여러 정점에서 모든 정점까지의 최단경로를 구함. 각 정점을 경유할 때 경로가 짧아지는지 아닌지를 검사함 $O(V^3)$
Kruskal 그래프에서 가중치가 최소인 엣지를 사이클이 존재하지 않도록 순서대로 고르며 트리를 만들어 MST를 구성하는 알고리즘 $O(E\log E)$
Prim 시작 정점과 가장 인접한 정점을 선택해 트리를 확장하고, 만들어진 트리와 가장 인접한 정점을 선택해 트리를 확장해나가는 과정을 반복하며 MST를 구성하는 알고리즘 $O(E\log V)$
Huffman Coding 그리디 알고리즘을 이용해 데이터를 2진수로 압축시키는 기법 $O(n\log n)$
Set Cover 전체집합의 부분집합 중, 가장 적은 개수를 골라서 그들의 합집합이 전체집합이 되도록 하는 문제 $O(n^3)$
LIS 수열 내에서 증가하는 순서대로 숫자를 고르면서 부분수열의 길이가 최대인 수열을 구하는 알고리즘 $O(n\log n)$
Edit distance 두 문자열이 같아지기 위해 필요한 연산의 최대 횟수를 구하며 문자열간의 유사도를 알아내는 알고리즘 $O(mn)$
Knapsack 일정 가치아 무게가 있는 짐을 배낭에 넣을 때, 배낭의 용량을 넘지 않는 선에서 짐들의 가치의 합이 최대가 되도록 짐을 고르는 문제 $O(nW)$
Chain matrix multiplication 두 개 이상의 행렬을 곱할 때 곱셈횟수가 최소가 되도록 결합법칙을 구하는 문제 $O(n^3)$
TSP 시작점에서 출발해 모든 도시들을 한번씩 방문하여 다시 돌아오는 데 걸리는 최단 시간을 구하는 문제 $O(n^2 2^n)$
Independent sets in trees 하나의 트리 내에서 가장 큰 독립집합을 찾는 문제 $O(n)$