서론
어떤 문제에서 답이 단조성을 가질 때는 binary search 등을 이용한 parametric search로 빠르게 답을 구할 수 있습니다.
병렬 이분 탐색(Parallel Binary Search, PBS)는 parametric search의 각 결정 문제를 스위핑 하듯이 풀 수 있는 몇몇 경우에 적용할 수 있는 기법입니다. 말로 설명하기 힘드니 문제와 함께 소개하겠습니다.
BOJ1396 크루스칼의 공
문제에서 $Q = 1$이라고 가정하고, 이분 탐색을 이용해 문제를 풀어봅시다.
최소 온도를 구할 것이기 때문에, 다음과 같은 결정 문제를 해결하면 문제를 풀 수 있습니다.
고유값이 mid 이하인 간선만 사용해 x에서 y로 갈 수 있는가?
최소 온도만 구해준다면 움직일 수 있는 범위는 union-find 등의 자료구조로 쉽게 알 수 있습니다.
시간 복잡도를 분석해보면 union-find를 사용하기 때문에 각 결정 문제를 해결하는데 $O(M log N)$이 소요되고, 결정 문제를 O(log M)번 해결해야 하므로 총 시간 복잡도는 $O(M log N log M)$입니다.
문제에서 주어진대로 Q ≤ 10만이라면 $O(QM log N log M)$이라는 TLE나기 좋은 시간 복잡도가 나옵니다.
이제부터 PBS를 이용해 시간 복잡도를 줄이는 방법을 알아봅시다.
Parallel Binary Search
서론에 있는 내용을 다시 보면, 각 결정 문제를 스위핑 하듯이 풀 수 있는 경우 에 PBS를 사용할 수 있다고 했습니다. 크루스칼의 공 문제도 간선들을 오름차순으로 스위핑 하듯이 결정 문제를 해결하기 때문에 PBS를 적용할 수 있습니다.
이 문제에서 결정 문제를 풀 때 우리가 관심이 있는 것은, mid 시점에 x에서 y로 갈 수 있는지 여부입니다. 그리고 $M$개의 간선을 쭉 훑어주면 모든 mid 시점을 고려할 수 있습니다.
여기에서 PBS의 아이디어가 나옵니다. 각 쿼리를 따로 처리할 필요 없이, mid가 같은 것끼리 묶어서 처리하고, 한 번의 스위핑으로 모든 mid값들을 고려해주는 것입니다.
스위핑을 한 번 하면 $Q$개의 쿼리에 대해 각각 한 번씩 결정 문제를 해결해준 것과 같은 효과를 얻을 수 있습니다. $O(log M)$번 스위핑하면 $Q$개의 쿼리의 답을 모두 구할 수 있겠지요. 이것이 Parallel Binary Search입니다.
한 번 스위핑 하는데 걸리는 시간을 분석해봅시다.
유사 크루스칼 알고리즘을 돌리는데 $O(M log N)$, $Q$개의 쿼리에 대해 각각 결정 문제를 푸는데 $O(QlogN)$, 총 $O((M+Q)logN)$이 걸립니다. union-find최적화를 잘 해주면 $O((M+Q) \alpha (N))$으로 줄일 수 있겠네요.
이러한 스위핑을 $O(log M)$번 하기 때문에 총 시간 복잡도는 $O((N+Q) \alpha(N) log M)$입니다.
구현
1 |
|