2016-10-10 3 views
0

전은 data structure이고 후자는 mathematical structure입니다.Union-Find는 그래프와 어떤 관련이 있습니까?

그러나 구현되면 동일한 기능과 동작을 많이 공유하는 것처럼 보입니다.

분리 세트의 각 요소는 그래프의 정점으로 간주 될 수 있습니다. 그래프에서 모서리가 Union-Find의 집합을 나타냅니다.

내가보기에는 두 가지 차이가 ​​더 큽니까? 언제 다른 하나를 사용하도록 선택해야합니까?

나는 그래프 알고리즘은 연합 찾기 구조 내부 http://algs4.cs.princeton.edu/43mst/KruskalMST.java.html

구현 세부 사항 사용할 수있는 볼 수 있지만, 연합 찾기가 빠르, 왜 사용 깊이 우선 검색 사이클 테스트? http://algs4.cs.princeton.edu/44sp/DirectedCycle.java.html

+0

Union Find 데이터 구조를 사용하여 새 모서리를 추가하면 O (logN)에 사이클이 생성되는지 테스트 할 수 있습니다. U와 V가 연결되어 있고 O (logN)의 Union Find를 사용하여이를 확인할 수 있습니다. 그런 다음 새 가장자리 UV를 추가하면 확실하게주기가 생기며 U와 V가 연결되어 있지 않으면 확실하지 않습니다. 주기를 만듭니다. 따라서 O (MlogN)에서 M 개의 에지를 테스트 할 수 있습니다. DFS를 사용하는 경우 모든 추가 된 가장자리에 대해 새로운 검색을 실행해야하므로 M 가장자리를 테스트하는 복잡성은 O (M * (N + M))가되며 이는 전혀 좋지 않습니다. –

답변

0

유니언 찾기는 동적 연결 문제에 대한 데이터 구조입니다 (예 : 런타임에 하나씩 가장자리를 연결하고 연결이 있는지 알고 싶을 때). 미로 또는 액체 침투를 생각해보십시오. 또한 동적 연결 문제에서는 대개 고유 한 항목 집합을 처리합니다. 본질적으로 등가 클래스를 구축하고 있습니다. 그러나 많은 그래프 문제에서 경로 또는 연결된 구성 요소를 찾고 있습니다.

귀하의 질문에 답하기 위해 가장자리를 추가/제거하고 시스템이 연결되었을 때 또는 연결된 항목의 수를 확인하려는 분리 된 세트 나 문제를 다루는 경우 union-find를 사용하십시오. 그렇지 않으면 DFS/BFS와 같은 그래프 알고리즘이 더 빠르고 쉽게 구현 될 수 있습니다.

+0

답변을 보완하기 위해 유니언 찾기 구조의 일반적인 사용 사례는 Kruskal 알고리즘입니다. 이 알고리즘에서는 원본 그래프의 최소 스패닝 트리가 남을 때까지 병합 할 동적 연결 구성 요소를 추적하기 위해 구조를 사용합니다 –

관련 문제