2009-10-29 4 views
13

가능한 복제를 서로 다른 경로의 수를 확인하는 방법은 다음과 같습니다
Graph Algorithm To Find All Connections Between Two Arbitrary Vertices알고리즘은 유향 그래프에

나는 유향 그래프를 가지고, 나는 별개의 수를 찾는 데 사용할 수있는 알고리즘 두 개의 특정 꼭지점 사이의 비순환 경로를 계산하고 이러한 경로에서 모든 경로가 사용되는 최대 시간을 계산합니까? 서로 다른 수의 정점을 방문하거나 다른 순서로 정점을 방문하면 두 경로가 구별됩니다.

+6

이 부분은 중복 될 필요가 없습니다. 값의 수를 아는 것 (정수)과 모든 값을 아는 것 (노드 목록 집합)에는 차이가 있습니다. 나의 목적을 위해, 숫자의 합리적인 추정 (상한선)조차도 괜찮습니다. 제게 이것은 중복되지 않습니다. – danatel

+3

[두 임의의 정점 사이의 모든 연결을 찾는 그래프 알고리즘] (http://stackoverflow.com/q/58306)은 중복되지 않습니다. 열거 및 계산은 다른 문제이며, 유향 그래프는 무향 그래프. 단순 경로 계산의 복잡성과 관련하여 [cs.se]의 [방향 그래프에서 두 노드 사이의 단순 경로 수를 계산하는 방법] (http://cs.stackexchange.com/q/423)을 참조하십시오. – Gilles

+0

Danatel에 동의합니다. 큰 그래프의 경우 가능한 모든 경로를 나열하는 것이 바람직하지 않습니다. –

답변

5

약간 수정 된 Dijkstra 알고리즘을 따르면 모든 쌍 솔루션을 사용할 수 있습니다.

설명 : w 통과 w

  • 경로 = 경로의 수를 통과하지 않는

    1. 경로 u에서 v에을 : v-u에서 경로는 다음의 합이다 u에서 ww에서
    2. 까지의 경로 수

    i에서 j (1 인 경우)의 가장자리가있는 경우를 제외하고는 0으로 매트릭스를 초기화하십시오. 그런 다음 다음의 알고리즘 (모든 쌍 경로 카운트) 말할 필요도없이

    for i = 1 to n: 
        for j = 1 to n: 
         for k = 1 to n: 
          paths[i][i] += paths[i][k] * paths[k][j] 
    

    당신에게 결과를 줄 것이다 : O(n^3)

    한 쌍 솔루션을 읽을 열망. :)

  • +3

    이 해결 방법은 경로에 사이클이 없어야한다는 요구 사항을 올바르게 처리하지 못합니다. – hugomg

    +3

    이것은 변형 된 Dijkstra가 아닌 수정 된 Bellman-Ford입니다 (따라서 사이클 문제). –

    관련 문제