관절점 탐색 알고리즘
2440 단어 알고리즘
lowlink 알고리즘
주의
거의 자신을 위해 이해하기 어려울 수 있습니다.
정직 수학적 엄밀성에 걸린 생각이지만 알고리즘을 이해하고 기억하기위한 "기억하는 방법", "사고 방식"이라고 생각하고 볼 수 있으면 다행입니다.
절차
①시점을 적당히 결정하고, DFS로 탐색을 실시한다
→ 발견되기까지 걸린 수수를 $cost$로 한다
→ 이때 경유한 변에 의해 구성되는 나무를 $T$로 한다
→ 경유하지 않았던 변을 $backEdge$로 한다
② 탐색이 종료되면 이하의 3개의 최소값을 취하는 $v$의 $minCost$를 결정한다
③ 각 정점 $v$와 그 부모 $parent(v)$에서 다음 식 중 하나를 만족한다면 $parent(v)$는 관절점이다
(a) $v$ 또는 $parent(v)$가 $root$일 때, 그 $root$가 두 개의 자식을 가지고 있다면 관절점이다.
(b) $cost(parent(v)) < minCost(v)$
주문
각 정점에서 $cost$를 계산하는 것은 $O(1)$
$minCost$의 계산에 있어서는 인접하는 $backEdge$를 모두 조사하기 때문에 인접변 $T(v)$를 이용해 $O(T(v))$
판정은 $O(1)$이기 때문에
$\sum_v(O(1)+0(T(v)) = O(|V|)+O(|E|)=O(|V|+|E|)$
해설
②에 대해
$minCost$는 DFS에서 통과하지 않은 경로를 통과하는 경우를 포함한 실질적인 최단 비용과 같습니다.
DFS에서 네 번째로 발견된 노드는 $backEdge$를 고려하면 실질적으로는 두 번째 정점과 거의 동등한 비용으로 생각된다
또, 부모는 아이보다 빨리 발견될 것으로 기대할 수 있기 때문에 아이의 $minCost$도 포함하고 있다
라고 생각하면 이해하기 쉬운・・・지도・・・(수학적인 엄밀성은 없다)
이 $minCost$를 구하는 방법에 의해 부모의 $minCost$는 아이의 $minCost$이하라고 보증할 수 있다(여기 중요!!!!!!)
③에 대해
(a) 정보
아래 왼쪽 그림은 루트가 두 개의 자식을 가지며 루트가 관절 점이 아닌 경우입니다.
그러나 DFS를 하고 있기 때문에 이러한 나무 $T$가 생성되지 않고 오른쪽 그림과 같은 마음이 생성되어야 한다(왼쪽 우선 탐색의 경우)
따라서 DFS에 의해 얻은 나무 $ T $의 루트에 대해, 아이가 2 개 존재하는 것은 루트가 관절점이기 때문에 필요한 충분한 조건이라고 할 수 있다.
(b) 정보
부모의 $minCost$는 아이의 $minCost$ 이하라고 보증할 수 있다(여기 중요!!)!!
보다 $v$의 아이의 실질적 최단 비용은 $v$의 실질적 최단 비용보다 크다.
또한 (b)가 성립 할 때 $ parent (v) $의 발견 비용 (실질적 최단 비용이 아님)보다 $ v $ 및 $ v $의 자식의 실질적 최단 비용이 커집니다.
즉, 어떻게 최단으로 $v$ 및 그 자손을 찾아내려고 해도 $parent(v)$를 발견한 후에만 발견할 수 있는 것이 비용의 관계로부터 알 수 있다.
이것으로부터 $parent(v)$가 없으면 연결성이 손실되는 것을 알 수 있다.
반대로 부모의 비용과 자녀의 실질적인 최단 비용이 같거나 부모의 비용보다 자식의 실질적인 최단 비용이 작 으면 부모를 거치지 않고 부모의 조상에서 자식으로 향하는 경로가 존재한다고합니다. 일입니다.
$parent(v)$ 없이 연결성은 손실되지 않는다는 것을 알 수 있다.
Reference
이 문제에 관하여(관절점 탐색 알고리즘), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ShibuKazu/items/55e3a791744fed8b5268텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)