>웹 프론트엔드 >JS 튜토리얼 >Floyd-Warshall 알고리즘과 Warshall 알고리즘의 전이적 폐쇄 구현 비교

Floyd-Warshall 알고리즘과 Warshall 알고리즘의 전이적 폐쇄 구현 비교

WBOY
WBOY원래의
2024-01-13 11:01:06870검색

Floyd-Warshall 알고리즘과 Warshall 알고리즘의 전이적 폐쇄 구현 비교

이행적 폐쇄의 두 가지 알고리즘 이해: Floyd-Warshall 알고리즘과 Warshall 알고리즘

전이적 폐쇄는 그래프 이론에서 중요한 개념으로, 그래프의 노드 간 이행 관계를 설명합니다. 전이적 폐쇄 알고리즘은 그래프의 A 지점에서 B 지점으로의 경로가 있는지 빠르게 확인하는 데 도움이 됩니다.

전이적 폐쇄 알고리즘에는 일반적으로 사용되는 두 가지 알고리즘이 있습니다: Floyd-Warshall 알고리즘과 Warshall 알고리즘. 둘 다 전이적 클로저를 효율적으로 계산할 수 있지만 구현 세부 사항과 성능이 다릅니다.

  1. Floyd-Warshall 알고리즘

Floyd-Warshall 알고리즘은 그래프의 두 점 사이의 최단 경로를 계산하는 데 사용되는 동적 프로그래밍 알고리즘입니다. Floyd-Warshall 알고리즘은 그래프의 모든 노드를 순회하여 노드 사이의 거리를 지속적으로 업데이트합니다. 최종 행렬에서 노드 i에서 노드 j까지의 경로가 있으면 행렬의 (i, j) 위치 값은 1입니다. , 그렇지 않으면 0입니다.

다음은 Floyd-Warshall 알고리즘의 샘플 코드입니다.

def floyd_warshall(graph):
    n = len(graph)
    dist = [[float('inf')] * n for _ in range(n)]

    for i in range(n):
        for j in range(n):
            if i == j:
                dist[i][j] = 0
            elif graph[i][j] != 0:
                dist[i][j] = graph[i][j]

    for k in range(n):
        for i in range(n):
            for j in range(n):
                dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])

    return dist
  1. Warshall 알고리즘

Warshall 알고리즘은 그래프의 두 점 사이에 경로가 있는지 여부를 계산하는 데 사용되는 행렬 연산을 기반으로 하는 알고리즘입니다. 부울 행렬을 지속적으로 업데이트함으로써 그래프의 전이 관계가 결정됩니다.

다음은 Warshall 알고리즘의 샘플 코드입니다.

def warshall(graph):
    n = len(graph)
    reachable = [[False] * n for _ in range(n)]

    for i in range(n):
        for j in range(n):
            if graph[i][j] != 0:
                reachable[i][j] = True

    for k in range(n):
        for i in range(n):
            for j in range(n):
                reachable[i][j] = reachable[i][j] or (reachable[i][k] and reachable[k][j])

    return reachable

위의 샘플 코드를 통해 Floyd-Warshall 알고리즘과 Warshall 알고리즘의 구체적인 구현을 이해합니다. 둘 다 전이적 폐쇄를 계산하는 데 효율성이 높지만 유향 그래프에서 임의의 두 점 사이의 최단 경로를 계산하는 데는 Floyd-Warshall 알고리즘이 적합한 반면, 그래프의 임의의 두 점이 경로인지 여부를 결정하는 데는 Warshall 알고리즘이 적합합니다. 존재합니다.

최단 경로를 계산해야 하는 경우 Floyd-Warshall 알고리즘을 사용할 수 있으며, 경로가 존재하는지 여부만 확인해야 하는 경우 Warshall 알고리즘을 선택할 수 있습니다. 적절한 알고리즘을 선택함으로써 그래프 이론 문제의 전이적 폐쇄 계산을 보다 효율적으로 해결할 수 있습니다.

위 내용은 Floyd-Warshall 알고리즘과 Warshall 알고리즘의 전이적 폐쇄 구현 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.