Floyd-Warshall, Dijkstra 및 Bellman-Ford 알고리즘의 차이점에 대해 맞습니까?


16

나는 세 가지를 공부하고 아래에서 그들로부터 내 추론을 진술하고 있습니다. 내가 충분히 정확하게 이해했는지 알 수 있습니까? 감사합니다.

  1. Dijkstra 알고리즘 은 단일 소스가 있고 한 노드에서 다른 노드로 가장 작은 경로를 알고 싶어 할 때만 사용되지만 이와 같은 경우에는 실패 합니다 .

  2. Floyd-Warshall 알고리즘 은 모든 노드 중 하나가 소스가 될 수있는 경우에 사용되므로 소스 노드에서 대상 노드까지 가장 짧은 거리에 도달해야합니다. 음수 사이클이있는 경우에만 실패합니다.

  3. Bellman-Ford 는 소스가 하나만있을 때 Dijkstra와 같이 사용됩니다. 이것은 음의 가중치를 처리 할 수 ​​있으며 그 작업은 하나의 소스를 제외하고 Floyd-Warshall과 동일합니다. (이것은 내가 가장 확신하지 않는 것입니다.)


어서 오십시오! 중복 코드 부분을 편집했습니다. 사람들은 스스로 위키 백과를 클릭하거나 좋아하는 교재에서 알고리즘을 확인할 수 있습니다. "예"답변은 더 이상 구성 될 수 없기 때문에 질문은 이상한 질문입니다.
라파엘

답변:


23

Dijkstra의 알고리즘은 단일 소스가 있고 한 노드에서 다른 노드로 가장 작은 경로를 알고 싶지만 실패합니다 (음의 모서리가있는 그래프에서).

Dijkstra의 알고리즘은 단일 소스 최단 경로 또는 SSSP 알고리즘 의 한 예입니다 . 모든 SSSP 알고리즘은 선택된 소스 노드의 최단 경로 거리 계산 그래프의 다른 노드. 또한 s 에서 다른 모든 노드 까지 모든 최단 경로를 루트 트리 형태로 간결하게 표시 합니다. Wikipedia 코드 에서이 트리에서 v 의 부모입니다 .에스에스previous[v]V

모서리가 음인 그래프에서 Dijkstra 알고리즘의 동작은 논의중인 정확한 변형에 따라 다릅니다. Wikipedia의 알고리즘과 같은 일부 알고리즘 변형은 항상 빠르게 실행되지만 음수 에지가있을 때 최단 경로를 올바르게 계산하지 않습니다. 이 강의 노트에 있는 것과 같은 다른 변형 은 소스에서 도달 할 수있는 음의주기가없는 한 항상 가장 짧은 경로를 정확하게 계산하지만 음의 가장자리가있는 경우 최악의 경우 지수 시간이 필요할 수 있습니다.

Floyd-Warshall의 알고리즘은 모든 노드 중 하나가 소스가 될 수있을 때 사용되므로 가장 짧은 거리가 모든 소스 노드에서 대상 노드에 도달하기를 원합니다. 음수 사이클이있는 경우에만 실패합니다.

맞습니다. Floyd-Warshall은 모든 쌍 최단 경로 알고리즘 의 한 예입니다. 즉, 모든 노드 쌍 사이의 최단 경로를 계산합니다 . 또 다른 예는 "각 노드 v에 대해 v를 소스 노드로 사용하여 Dijkstra를 실행"입니다. 다른 몇 가지가 있습니다.

Bellman-Ford는 소스가 하나만있을 때 Dijkstra와 같이 사용됩니다. 이것은 음의 가중치를 처리 할 수 ​​있으며 그 작동은 Floyd-Warshall과 동일합니다. 하나의 소스를 제외하고는 그렇습니까?

영형(V)영형(V2이자형)영형(V이자형)

자세한 내용은 선호하는 알고리즘 교재를 참조하십시오. (당신은 좋아하는 알고리즘 교과서를 가지고 있습니까?)


좋아하는 알고리즘 교재를 공유 하시겠습니까?
Abdul

2

@Abdul 미끼. -MIT / Stanford에서 사용 된 교재는 T. Cormen, et al. 알고리즘 소개. Cornell에서 사용 된 교재는 J. Kleinberg, et al Algorithm Design입니다. cs.sjtu.edu.cn/~jiangli/teaching/CS222/files/materials/…
AffluentOwl

2

세 가지 알고리즘은 모두 박재현 교수 (스탠포드 대학교)의 강의 슬라이드에서 다룹니다. 최단 경로 알고리즘 링크는 다음과 같습니다.


이것은 차이점에 대한 질문에 대답하지 않고 독립적이며, 요약이없는 링크만이 좋은 대답으로 간주되지 않습니다. 또한 기존 답변보다 더 많은 것을 다루지 않으므로 중복되는 것처럼 보입니다.
Evil

1

최단 경로 문제Wikipedia 페이지는 SSSP와 APSP의 두 가지 다른 문제를 설명합니다.

단일 소스 최단 경로 (SSSP) :

  • Dijkstra의 알고리즘 : 단일 소스 최단 경로 문제를 해결합니다.
    • 제약 : 네거티브 가장자리 만 처리 할 수 ​​없습니다.
    • 비가 중 그래프 : Dijkstra는 BFS와 동일합니다.
  • Bellman–Ford 알고리즘 : 간선 가중치가 음수 일 경우 단일 소스 문제를 해결합니다. Dijkstra에서 음수 가중치를 처리 할 수있는 기능이 개선되었습니다.

모든 쌍 최단 경로 (APSP) :

  • Floyd–Warshall 알고리즘 : 모든 쌍의 최단 경로를 해결합니다. 포지티브 및 네거티브 에지를 모두 처리합니다.
    • 제약 조건 : 음수 사이클을 처리 할 수 ​​없습니다.

따라서 Floyd–Warshall은 BFS와 동일하지 않지만 기본 방법론은 동일하고 동적 인 프로그래밍입니다.


1

아마도 이것은 답변이 아닌 의견이어야하지만 다른 답변에서는 언급하지 않는 알고리즘 사이의 차이점입니다.

사람들은 Floyd의 알고리즘을 Floyd-Warshall 이라고 부르는 경향이 있습니다. 있지만 Floyd와 Warshall의 알고리즘은 동일하지 않습니다.

Warshall의 논문에 따르면 이진 발생 행렬에서 Floyd의 알고리즘을 사용하는 경우 행하는 것은 행렬 곱셈입니다. 따라서 실제로 그런 식으로 구현할 수 있습니다. 예를 들어 벡터 곱셈을영형(1)알고리즘은 영형(2).

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