[アルゴリズム]位相位置合わせ


位相位置合わせ


定義:
  • 方向図のすべてのノードは「方向性に違反しないように順番にリストする」
  • .
    機能:
  • 並べ替えアルゴリズムの1つ
  • を使用して一連のタスクを順次実行
    例>選手科目の学習順序を設定する
  • 位相整列アルゴリズム:
  • アクセス回数0のキュー
  • キューがアイドルになるまで、次の手順を繰り返します.
  • キューから要素を取り出し、そのノードからのedgeを図から
  • 削除する.
  • 新しい入力差が0のノードをキュー
  • に入れる.

    ソースコードの例

    # 이코테 p.296 위상 정렬 
    from collections import deque
    
    v, e = map(int, input().split())
    indegree = [0] * (v + 1)
    
    graph = [[] for i in range(v + 1)]
    
    for _ in range(e):
        a, b = map(int, input().split())
        graph[a].append(b)
        indegree[b] += 1
    
    def topology_sort():
        result = []
        q = deque()
    
        for i in range(1, v + 1):
            if indegree[i] == 0:
                q.append(i)
    
        while q:
            now = q.popleft()
            result.append(now)
            for i in graph[now]:
                indegree[i] -= 1
                if indegree[i] == 0:
                    q.append(i)
    
        for i in result:
            print(i, end=' ')
    
    topology_sort()

    時間の複雑さ


    O(V+E)O(V + E)O(V+E)