알고리즘을 공부하는 목적?
- 코딩 테스트의 출제 의도 파악을 분명히 함
- '최적화'에 대한 이해
- 개인 프로젝트의 퀄리티를 높임
- 포트폴리오의 어필 방향을 확실히 함
종류
- 빅오 표기법 Big-O notation - 시간복잡도, 공간복잡도
- 완전 탐색 Brute-force search
- 탐욕적 기법 Greedy Algorithm
- 분할 정복 Divide and conquer
- 동적 계획법 Dynamic programming
- 이진 탐색 Binary search
- 파라메트릭 탐색 Parametric search
- 깊이 우선 탐색 Depth-First search (DFS)
- 너비 우선 탐색 Breadth-First search (BFS)
- 백트래킹 Backtracking
- 비트마스킹 Bit masking
- 구간합 배열 Prefix sum
- 에라토스테네스의 체 Sieve of Eratosthenes
- 희소 테이블 Sparse table
- 투 포인터 Two pointers algorithm
- 슬라이딩 윈도우 Sliding window
- 다익스트라 알고리즘 Dijkstra's algorithm
- 벨만 포드 알고리즘 Bellman-Ford algorithm
- 플로이드 와샬 알고리즘 Floyd-Warshall algorithm
- 프림 알고리즘 Prim's algorithm
- 솔린 알고리즘 Sollin's algorithm
- 크루스칼 알고리즘 Kruskal's algorithm
- 위상 정렬 Topological sort
- 오일러 경로, 오일러 회로 Eulerian path, Eulerian circuit
- 히어홀저 알고리즘 Hierholzer's algorithm
- 강한 연결 요소 Strongly connected componeny (SCC)
- 이중 연결 요소 Biconnected componeny (BCC)
- 2-SAT 문제 2-Satisfiability problem
- 네트워크 유랑 Network flow
- 이분 매칭 Bipartite matching
- 최소 컷 Minimum cut
- 최소 비용 최대 유량 Minimum cost maximum flow
- 디닉 알고리즘 Dinic's algorithm
- 호프크로프트 카프 알고리즘 Hopcroft-Karp algorithm
- 최소 공통 조상 Lowest common ancestor
- 레이지 프로퍼게이션 Lazy propagation
- 볼록 껍질 Convex hull
- 스위핑 기법 Sweeping algorithm
- KMP 알고리즘 Knuth-Morris-Pratt algorithm
- 라빈 카프 알고리즘 Rabin-Karp algorithm
- 트라이 Trie
- 아호코라식 Aho-Corasick
- 접미사 배열 Suffix Array
- 밋 인 더 미들 Meet in the middle
- 오프라인 쿼리 Offline query
- 평방 분할 Sqare root decomposition
- 모스 알고리즘 Mo's algorithm
- 병렬 이진 탐색 Parallel binary search
- 헤비 라이트 디컴포지션 Heavy-Light decomposition
- 확장 유클리드 알고리즘 Extended euclidean algorithm
- 컨벡스 헐 트릭 Convex hull trick
- 서큘레이션 Circulation
- 삼분 탐색 Ternary search
- 블록 컷 트리 Block-Cut tree
- 고속 푸리에 변환 Fast fourier transform (FFT)
- 중국인의 나머지 정리 Chinese remainder theorem