1) Knuth-Morris-Pratt Algorithm 2) Aho-Corasick Algorithm 1) Knuth-Morris-Pratt Algorithm KMP Algorithm은 패턴 P와 문자열 S가 있을 때, 문자열 S에 패턴 P가 부분문자열로 있는지, 혹은 몇 개 있는지 선형시간 O(|S|+|P|)에 확인하는 방법이다. 기본적인 아이디어는 실패 함수 f(i)에서 온다. 아래는 패턴 P가 "abracadabra" 일 때 실패 함수 값을 표로 나타낸 것이다. i 1 2 3 4 5 6 7 8 9 10 11 P a b r a c a d a b r a f 0 0 0 1 0 1 0 1 2 3 4 P[i,j]를 패턴 P의 i번째 문자부터 j번째 문자까지로 구성된..
Persistent Segment Tree는 가상으로 N개의 Segment Tree를 두는데 공간복잡도는 O(NlgN)인 Segment Tree 구축 기법이다. Persistent Segment Tree는 주로 update 질의가 없는 2D range query에서 쓰인다. 예를 들어, 2차원 좌표상에 N개의 점이 있고, x, y 좌표가 모두 1이상 N이하이면서, x 좌표가 N개의 점에 대해 서로 다르다고 하자. 이 때, 특정 영역에 대해 영역 안의 점의 수를 세는 질의를 O(lgN) 시간안에 해결할 수 있다. 다음과 같이 N개의 Segment Tree와 그 트리에서 함수 count(y1, y2)를 정의하자. 1) Tree[i] = x 좌표가 1이상 i이하인 점들만 있다..
Divide & Conquer Optimization은 특정 조건을 만족할 때 활용할 수 있는 최적화 기법이다. 주로 Dynamic Programming에서 쓰인다고 생각할 수 있으나, Dynamic Programming이 아닌 상황에서도 널리 쓰일 수 있다. 조건 1) DP 점화식 꼴 D[t][i]=mink<i(D[t−1][k]+C[k][i])와 같이 D[t][i] 안에 D[t−1][k]와 k에 대한 함수 f(k)가 들어가 있는 경우 조건 2) A[t][i]는 D[t][i]를 만족시키는 최소 k라 할 때 아래 부등식을 만족 A[t][i]≤A[t][i+1] 위 두 조건을 만족하면 원래 O(KN2)의 시간복잡도를 갖는 DP를 Divide & ..
- Total
- Today
- Yesterday
- HackerRank
- moore
- BOI 2001
- z-trening
- Tree
- BOI 2009
- ioi
- vote
- Splay Tree
- BOI
- Dynamic Pramming
- Divide & Conquer
- Boyer
- IOI2012
- Knuth Optimization
- Greedy Method
- Dijkstra
- USACO
- Boyer-Moore Majority Vote Algorithm
- idea
- optimization
- Segment tree
- dynamic programming
- IOI2014
- Algorithm
- IOI2013
- IOI2011
- majority
- TRIE
- Parametric Search
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |