[알고리즘_1] 알고리즘 분류

May 20, 2024    1 분 소요

개론

개념을 분류하는 것을 좋아한다. 알고리즘을 명확한 기준을 가지고 분류하기는 어렵지만, 내 기준으로 정리해보았다. 기본적인 알고리즘은 왠만하면 포함하지만, 어려운 알고리즘들은 내가 공부했거나 공부할 예정인 알고리즘들만 포함되어있다.

알고리즘 분류

1. 탐색 및 정렬

  • Brute Force : 모든 가능한 경우를 시도하는 방법
  • Depth First Search (DFS) : 깊이를 우선적으로 탐색하는 방법
  • Breadth First Search (BFS) : 너비를 우선적으로 탐색하는 방법
  • Topological Sort : Directed Acyclic Graph (DAG)에서 노드를 순서대로 정렬하는 알고리즘

2. 최적화 기법

  • Greedy : 현재 상황에서 가장 좋아보이는 선택을 하는 방법
  • Dynamic Programming (DP) : 문제를 작은 하위 문제로 나누어 푸는 방법
    • Longest Common Subsequence (LCS) : 두 문자열의 가장 긴 공통 부분 수열을 찾는 알고리즘
    • Longest Increasing Subsequence (LIS) : 주어진 수열에서 가장 긴 증가하는 부분 수열을 찾는 알고리즘
  • Knapsack : 물건을 배낭에 담을 때 가치를 최대화 하는 방법을 찾는 문제

3. 그래프 알고리즘

  • Dijkstra : 가중치가 있는 그래프에서 단일 출발점에서 다른 모든 정점까지의 최단 경로를 찾는 알고리즘
  • Floyd-Warshall : 모든 정점 쌍 간의 최단 경로를 찾는 알고리즘
  • Union-Find : 여러 노드가 서로 연결되어 있는지를 판별하는 자료구조
  • Strongly Connected Component (SCC) : 방향 그래프에서 순환할 수 있는 노드들을 찾는 알고리즘
    • SAT-2 : 2-Satisfiability 문제

4. 자료구조

  • Segment Tree : 배열에서 구간에 대한 정보를 저장하는 자료구조

5. 문자열 알고리즘

  • Knuth-Morris-Pratt (KMP) : 부분 문자열을 효율적으로 찾는 문자열 검색 알고리즘
  • Aho-Corasick : 여러 문자열을 동시에 검색하기 위한 알고리즘

6. 수학 및 수치 해석

  • Fast Fourier Transform (FFT) : Convolution 연산을 빠르게 수행하는 알고리즘

공부 계획

  • 다익스트라 -> 플로이드-워셜 -> 벨만-포드
  • 위상정렬 -> Union-Find -> SCC, SAT
  • 세그먼트 트리
  • KMP -> 아호-코라식
  • FFT -> NTT