2/3 개의 다른 최소 스패닝 트리가있는 그래프?


15

주어진 그래프 G에 두 개의 다른 최소 스패닝 트리가 있는지 여부를 감지하는 효율적인 방법을 찾으려고합니다. 또한 3 개의 최소 스패닝 트리가 있는지 확인하는 방법을 찾고 있습니다. 내가 한 순진한 해결책은 Kruskal의 알고리즘을 한 번 실행하고 최소 스패닝 트리의 총 중량을 찾는 것입니다. 나중에 그래프에서 가장자리를 제거하고 Kruskal 알고리즘을 다시 실행하고 새 트리의 가중치가 원래의 최소 스패닝 트리의 가중치인지 확인하고 그래프의 각 모서리에 대해. 런타임은 전혀 좋지 않은 O (| V || E | log | V |)이며 더 좋은 방법이 있다고 생각합니다.

어떤 제안이라도 미리 도움이 될 것입니다.


그러한 알고리즘을 알고 있으면 좋겠지 만, 현재의 문제를 해결하지 못할 것입니다
itamar

2
그래프 는 (1) 를 두 개의 부분 집합으로 분할 하는 경우, 각 부분 집합에서 하나의 종점이있는 최소 가중치 가장자리가 고유하고 (2) 최대 가중치 모든 사이클의 모서리 는 독특합니다. GV(G)G
Juho

이 질문 하나둘이 이미 귀하의 질문에 대답 하고 있습니까?
Juho

에서 두 번째로 좋은 MST를 찾는 방법은 CLRS의 문제 23-1을 참조하십시오 . O(n2)
Kaveh

답변:


7

Kapoor & Ramesh ( 올바른 SIAM J. Comput. 버전 , 무료 (?) 개인 웹 사이트 버전 )는 가중 및 비가 중 그래프 모두에서 모든 최소 스패닝 트리를 열거하는 알고리즘을 제공합니다.

기본 아이디어에 대한 나의 이해는 하나의 MST로 시작한 다음 그래프의 사이클을 따라 가장자리를 바꾸는 것입니다 (무게가 괜찮다면 한쪽 가장자리를 다른 가장자리로 교체하여 트리를 다시 연결할 것입니다) .

가중치 적용 사례의 경우 의 모든 최소 스패닝 트리를 나열하는 실행 시간을 제공합니다. 여기서 은 이러한 스패닝 트리의 수입니다. 무게를 늘리는 순서대로 열거하고 현재 (커리) 이해는 주어진 수의 트리를 생성 한 후 (MST로 시작하여 순차적으로 생성하므로) 알고리즘을 종료하는 것이 완벽하게 가능하다는 것을 암시합니다.O(N|V|)N


이 상황에서 개 이상의 솔루션 이 있다는 것을 알고 나면 알고리즘을 조기에 중단하고 싶습니다 . 알고리즘이이를 허용합니까? k
Raphael

1
@Raphael, 나는 실제로 그것을 잡을 시간이 없었습니다 (예 : 과제 표시). 약간의 이해로 가능할 것입니다. 일부 MST로 시작한 다음 다른 하나를 하나씩 생성합니다.
Luke Mathieson

1
@SaeedAmiri "의 수 와 같은 수단"의 수 스패닝 트리 " 최소 스패닝 트리"가 아닌 "스패닝 트리의 수 '. 모든 스패닝 트리가 최소 스패닝 트리 인 경우 입력 그래프가 완료되고 모든 모서리의 가중치가 같습니다. nn2
JeffE

1
이 논문은 가중 그래프와 비가 중 그래프를 모두 고려하므로 모두 맞습니다.). 또한 원하는 수의 트리를 생성 한 후 알고리즘이 중지 될 수 있다고 생각하므로 OP의 경우 로 줄어 듭니다 . 다시, 나는 더 나은 모습을 갖기 위해 자유 시간이 필요합니다. O(|V|)
Luke Mathieson

1
빠른 판독 후 가중치 알고리즘은 가중치 순서 (MST에서 시작)로 트리를 생성합니다. 따라서 OP의 목적을 위해 있어야합니다.
Luke Mathieson

2

Kruskal의 알고리즘이 모든 최소 스패닝 트리를 찾을 수 있음을 보여줄 수 있습니다. 여기를 참조 하십시오 .

따라서 Kruskal을 실행하고 선택할 수있는 여러 모서리가있을 때마다 분기를 실행할 수 있습니다. k분기되면 최소한 k 개의 다른 최소 스패닝 트리 가 있음을 알 수 있습니다 . 케이케이불행하게도, 여러 가지 가지가 다른 순서로 같은 무게의 가장자리를 추가하여 같은 나무를 만들 수 있으므로 더 많은 작업 / 통찰력이 없으면 도움이되지 않습니다.


5
아니요. 한 단계에서 가장자리 중에서 선택해야하는 경우 k 가장자리가 모든 스패닝 트리에 있을 수 있습니다 . 예를 들어 가중치 1의 모든 모서리를 가진 K 1 , 5 별만 사용하십시오. 첫 번째 단계는 5 개의 모서리 중 하나를 선택해야합니다. 그러나 분명히 하나의 스패닝 트리 만 있습니다. 스패닝 트리에 포함 된 모서리에 가중치가 동일한 모서리 수를 계산하면 도움이됩니까? 흥미로운 질문 ...케이케이케이1,5
vonbrand

@vonbrand 좋은 지적입니다. 물론 계산의 모든 브랜치를 계속 완료 할 수 있지만 런타임은 스패닝 트리의 수에 따라 결정되며 이는 지수 일 수 있습니다.
Raphael

1

MST가 둘 이상 있는지 확인하려면 Kruskal의 알고리즘을 고려하십시오. 다른 MST를 구성 할 수있는 유일한 방법은 같은 무게를 가진 여러 개가있을 때 다른 가장자리를 선택하여 가장자리를 남기는 것입니다. 그러나 같은 무게의 가장자리는 가장자리가 더 밝은 사이클을 형성했기 때문에 제외되었을 수 있습니다 ...

따라서 Kruskal의 알고리즘을 실행하고 고려해야 할 가중치가 같은 모서리가 여러 개인 경우 사이클을 만들지 않고 추가 할 수있는 모서리를 모두 추가하십시오. 이 무게의 가장자리가 남아 있고 더 적은 무게 (이전에 추가 된)의 가장자리가있는 사이클을 닫지 않으면 MST가 두 개 이상 있습니다. 정확히 2 개 또는 3 개 이상이 있는지 확인하는 것이 훨씬 어려워 보입니다 ...


0

Kruskal 알고리즘 수정 : 모서리를 주문하는 동안 모서리가 동일한 무게로 클러스터링됩니다. 이제 에지를 순서대로 처리하는 시점에서 새 클러스터에 도달 할 때마다 먼저 모든 에지를 개별적으로 확인하고 클러스터 이전에 구축 된 것을 고려하여주기를 닫는 에지를 클러스터에서 제거하십시오. 그런 다음 클러스터의 나머지 모서리를 모두 실행하여 MST에 추가하십시오. 그들 중 하나가 사이클을 닫으면 이는 이전에 동일한 클러스터의 다른 가장자리로 인해 발생했기 때문에 MST가 둘 이상 있음을 의미합니다.

이 솔루션은 Kruskal 알고리즘의 복잡성을 유지하며 처리되는 각 에지의 시간 만 증가시킵니다.


전체 클러스터를 일정한 시간에 처리 할 수 ​​있다고 주장하는 것 같지만 클러스터 크기에 명확한 상수가 보이지 않습니다. 해당 단계가 수행되는 방법에 대해 더 자세히 설명해 주시겠습니까?
David Richerby
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.