답변:
이것은 비가 중 그래프이므로 그래프의 모든 정점 에서 너비 우선 탐색 (BFS)을 실행할 수 있습니다 . 각 BFS 실행은 시작 정점에서 다른 모든 정점까지의 최단 거리 (및 경로)를 제공합니다. 하나 BFS위한 시간 복잡도는 부터 하여 희소 그래프이다. 이 실행 번이나 당신에게 제공 시간 복잡도를.O ( V + E ) = O ( V ) E = O ( V ) V O ( V 2 )
가중 유도 그래프의 경우 Yuval에서 제안한 Johnson의 알고리즘 이 희소 그래프에 가장 빠릅니다. 그것은 소요 귀하의 경우로 밝혀 . 가중 비 방향 그래프의 경우 각 노드에서 Dijkstra의 알고리즘 을 실행 하거나 각 비 방향 에지를 두 개의 반대 방향 에지로 바꾸고 Johnson 알고리즘을 실행할 수 있습니다. 두 가지 모두 희소 사례에 대해 위의 Johnson 알고리즘과 동일한 무증상 시간을 제공합니다. 또한 위에서 언급 한 BFS 접근 방식은 유향 그래프와 무향 그래프 모두에서 작동합니다.O ( V 2 로그 V )
희소 행렬에서 더 빠른 Floyd-Warshall 버전을 만들 수 있습니다.
먼저,이 알고리즘의 기능을 기억해 봅시다 :
을 거리 행렬로 하자 . 알고리즘의 시작에서 M I , J는 에지의 무게 나 → j는 . 이 에지 않는다면없는 M I를 , J가 = ∞ .
알고리즘에는 단계가 있습니다. 알고리즘의 k 단계 에서 모든 노드 쌍 i , j에 대해
분명한 경우 또는 일절 업데이트 요구가 수행 될 것이다. 따라서 알고리즘의 첫 번째 단계 에서 및 나타내는 비교 만 수행하면됩니다. 번째 노드 의 수신 및 송신 에지 수 알고리즘이 진행됨에 따라 점점 더 많은 행렬 엔트리 가 채워진다. 따라서 마지막 단계는 훨씬 오래 걸릴 수 있습니다.
행렬 의 번째 행과 열 에서 무한대가 아닌 셀에 대해서만 반복하는 효율적인 방법이 필요합니다 . 이것은 모든 노드에 대해 수신 및 발신 에지 세트를 유지하여 수행 할 수 있습니다.
알고리즘의 첫 번째 단계는 희소성에서 큰 이점을 얻을 수 있습니다. 예를 들어, 사용하여 임의로 구성된 그래프 는 첫 번째 반복 ( )이 단계에 불과 함을 나타 냅니다. 그래프가 많은 연결된 구성 요소로 나뉘면 행렬 은 알고리즘 전체에서 비교적 희소하게 유지되며 총 런타임은 만큼 낮을 수 있습니다 . 반면에 그래프에 연결된 구성 요소가 하나만 있으면 마지막 반복걸릴 것으로 예상되는 단계. 이 경우 총 런타임은 있습니다. 스파 스가 아닌 버전만큼 큽니다.