최소 스패닝 트리 및 최단 경로


44

최소 스패닝 트리 알고리즘과 최단 경로 알고리즘의 차이점은 무엇입니까?

내 데이터 구조 클래스에서 우리는 두 개의 최소 스패닝 트리 알고리즘 (Prim과 Kruskal)과 하나의 최단 경로 알고리즘 (Dijkstra)을 다루었습니다.

최소 스패닝 트리는 모든 정점에 걸쳐있는 그래프의 트리이며 트리의 총 무게는 최소입니다. 최단 경로는 매우 분명합니다. 한 정점에서 다른 정점으로의 최단 경로입니다.

내가 이해하지 못하는 것은 최소 스패닝 트리의 총 가중치가 최소이므로 트리의 경로가 가장 짧은 경로가 아닐까요? 아무도 내가 잃어버린 것을 설명 할 수 있습니까?

도움을 주시면 감사하겠습니다.


다음은 최소 스패닝 트리가 최단 경로와 동일하지 않음을 증명하는 비슷한 질문에 대한 예입니다. cs.stackexchange.com/a/43327/34363
atayenel

또한 이것은 흥미로울 수 있습니다. 최대 스패닝 트리에는 각 경로가 병목 경로 인 노드 사이에 경로가 있습니다. 즉, 합계를 최소화하는 대신 최소 가중치를 최대화하십시오. 최소 스패닝 트리간에 유사한 관계가있을 수 있습니다.
Eugene

답변:


37

단위 가중치가있는 삼각형 그래프를 고려하십시오. 여기에는 3 개의 꼭짓점 가 있고 3 개의 모든 모서리 가중치는 입니다. 두 정점 사이의 최단 경로는 직접 경로이지만, 모두 정합하면 나무가 아닌 삼각형이됩니다. 두 개의 모서리의 모든 모음은이 그래프에서 최소 스패닝 트리를 형성하지만 예를 들어 를 선택하면 가장 짧은 경로 인 .x,y,z{x,y},{x,z},{y,z}1{x,y},{y,z}{x,z}

결론적으로, 가장 짧은 경로를 모두 모으면 반드시 나무를 얻을 필요는 없습니다.


32

Dijkstra 의 두 알고리즘 (단일 시작 노드에서 가장 짧은 경로)과 Prim (주어진 노드에서 시작하는 최소 가중치 스패닝 트리)의 구조는 매우 유사합니다. 그들은 탐욕스럽고 (현재의 관점에서 가장 좋은 가장자리를 취함) 그래프에 걸쳐있는 나무를 만듭니다.

그러나 그들이 최소화하는 가치는 다릅니다. Dijkstra는 트리에서 시작 노드에 가장 근접하게 선택되지 않은 노드로 이어지는 에지를 다음 에지로 선택합니다. (이러한 선택으로 거리가 다시 계산됩니다.) Prim은 지금까지 구성된 나무에서 가장 짧은 가장자리를 가장자리로 선택합니다. 따라서 두 알고리즘 모두 "최소 에지"를 선택했습니다. 가장 큰 차이점은 최소값으로 선택된 값입니다. Dijkstra의 경우 시작 노드에서 후보 노드까지의 전체 경로 길이이며 Prim의 경우 단일 에지의 가중치 일뿐입니다.

차이점을 확인하려면 몇 가지 예를 구성하여 어떤 일이 발생하는지 확인해야합니다. 이는 실제로 유익합니다. 다른 동작을 나타내는 가장 간단한 예는 모서리가 이고 길이가 2 인 인 삼각형 이며 , 길이는 1입니다. Dijkstra는 및 (길이 2의 두 경로 제공)를 선택하고 Prim은 및 (스패닝 트리 제공)를 선택합니다. 무게 3).x,y,z{x,y}{x,z}{y,z}x{x,y}{x,z}{x,y}{y,z}

나무 : Dijkstra vs Kruskal

에 관해서는 크루스 칼 , 그것은 약간 다릅니다. 최소한의 스패닝 트리를 해결하지만 실행 중에 트리를 형성하지 않을 수있는 가장자리를 선택하면 사이클을 피할 수 있습니다. 따라서 부분 솔루션의 연결이 끊어 질 수 있습니다. 결국 당신은 나무를 얻는다.


12

최소 스패닝 트리 및 최단 경로 알고리즘 계산은 비슷해 보이지만 두 가지 요구 사항에 중점을 둡니다.

MST에서 요구 사항은 각 정점에 한 번 도달해야하고 (그래프 트리 생성) 각 정점에 도달하는 총 (집합 적) 비용은 가능한 모든 조합 중에서 최소 여야합니다.

최단 경로에서 요구 사항은 가능한 최저 비용 (가장 짧은 중량)으로 소스 정점에서 대상 정점에 도달하는 것입니다. 따라서 여기서 우리는 각 정점에 도달하는 것에 대해 걱정하지 않고 소스와 대상 정점에만 초점을 맞추고 차이점이있는 곳에만 집중합니다.

다음은 MST가 반드시 두 정점 사이에 최단 경로를 제공하지 않는 이유를 설명하는 예입니다.

(A)----5---(B)----5---(C)
 |                     |
 |----------7----------| 

MST 경우 모서리 AB. BC는 총 중량이 10 인 MST에있을 것입니다. 따라서 MST에서 A에서 C까지 도달하는 비용은 10입니다.

그러나 최단 경로의 경우 A와 C 사이의 최단 경로는 AC이며 7입니다. AC는 MST에 없었습니다.


4

차이점은이 알고리즘의 최종 목표가 무엇인지에 있습니다.

Dijkstra 's-목표는 처음부터 끝까지 도달하는 것입니다. 이 2 점만 걱정하고 그에 따라 경로를 최적화하십시오.

Krusal 's-여기서 당신은 어느 지점에서든 시작할 수 있으며 그래프의 다른 모든 지점을 방문해야합니다. 따라서 두 지점에 대해 항상 최단 경로를 선택하지 않을 수도 있습니다. 대신 다른 모든 지점에 대해 더 짧은 경로로 연결되는 경로를 선택하는 것이 중요합니다.


1

나는 예가 그것을 더 명확하게 할 것이라고 생각한다 ..

여기에 이미지 설명을 입력하십시오

스패닝 트리는 다음과 같습니다. 이 구성에서 모서리를 합하면 총 비용최소 2 + 5 + 14 + 4 = 25 가되기 때문 입니다.

(1)   (4)
  \   /
   (2)
  /   \
(3)   (5)

스패닝 트리를 눈으로 볼 때 그것이 가장 짧은 경로를 제공한다고 잘못 생각할 수도 있지만 실제로는 그렇지 않습니다. 예를 들어 노드에서 노드로 이동 (1)하려면 (4)비용이 7입니다. 그러나 원래 그래프에서 Dijkstra의 알고리즘을 사용하면 노드 (1)에서 직접 (4)비용을 지불 할 수 있습니다 5.


-1

차이점을 보여주는 실제 사례>

마을에 기차로 도착하여 호텔에 도착한다고 가정 해 봅시다.

옵션 1 : 택시 이용 : 택시는 역에서 호텔까지 가장 짧은 경로를 따라갑니다. 운전자가 역을 중심으로 가장 짧은 경로 트리를 따라 경로를 따라야하는 경우.

옵션 2 : 버스를 타십시오. 버스 회사는 당신뿐만 아니라 사람들을 수용하기를 원합니다. 이상적인 길은 도시의 모든 주요 지점을 차지합니다. 따라서 최소 스패닝 트리를 따라 (*) 경로를 따릅니다. 그렇기 때문에 버스가 느리지 만 비용이 공유되므로 저렴합니다.

(*) 실제로 사람들은 최소 스패닝 트리가 사용 된 경우 (버스 여행이 너무 길 경우) 불평 할 것입니다. 따라서 실제로는 혼합 솔루션이되고 알파 트리 (최소 스패닝 트리와 최단 경로 트리 사이의 절반)를 사용합니다.


1
사이트에 오신 것을 환영합니다. 버스로가는 길은 나무에 얽매이지 않는 것처럼 보이기 때문에 당신의 비유가 좋은 것이라고 생각하지 않습니다. 특히, 그것은 스패닝되지 않으며 (도시의 모든 지점을 방문하지는 않습니다) 나무가 아닙니다. 오히려 합리적으로 많은 중요한 지점을 방문하거나 지나가는 일종의 경로 (또는주기)이므로 경로는 합리적으로 많은 사람들에게 합리적으로 유용합니다.
David Richerby

-1

그들은 두 가지 다른 속성을 기반으로합니다. 최소 스패닝 트리는 컷 속성을 기준으로하는 반면 최단 경로는 가장자리 이완 속성을 기반으로합니다.

컷은 그래프를 두 개의 구성 요소로 나눕니다. 여러 모서리가 포함될 수 있습니다. MST에서는 무게가 가장 작은 가장자리를 선택합니다.

가장자리 이완은 A와 B 사이의 거리를 알면 : dist (a, b)와 A와 C 사이의 거리 : dist (a, c), dist (a, b) + edge (b, c)가 dist (a, c), 가장자리 (ac)를 이완시킬 수 있습니다. 모든 가장자리를 이완 한 후 가장 짧은 경로를 얻습니다.

Robert Sedgewick 교수의 그래프 알고리즘 비디오를 시청하는 것이 좋습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.