推移的閉包アルゴリズムの比較: ボトムアップ アルゴリズムとトップダウン アルゴリズム
はじめに:
推移的閉包アルゴリズムは、一般的に使用されるグラフ理論の一種です。有向グラフまたは無向グラフでグラフの推移閉包を見つけることができるアルゴリズム。この記事では、推移的閉包アルゴリズムの 2 つの一般的な実装方法であるボトムアップ アルゴリズムとトップダウン アルゴリズムを比較し、具体的なコード例を示します。
1. ボトムアップ アルゴリズム:
ボトムアップ アルゴリズムは、推移的閉包アルゴリズムの実装方法であり、グラフ内のすべての可能なパスを計算することによってグラフの推移的閉包を構築します。アルゴリズムの手順は次のとおりです。
以下は、隣接行列 Graph と推移閉包行列 TransitiveClosure を入力として受け取る、ボトムアップ アルゴリズムの具体的なコード例です。
def transitive_closure(Graph, TransitiveClosure): num_vertices = len(Graph) for v in range(num_vertices): TransitiveClosure[v][v] = 1 for u in range(num_vertices): for v in range(num_vertices): if Graph[u][v]: TransitiveClosure[u][v] = 1 for w in range(num_vertices): for u in range(num_vertices): for v in range(num_vertices): if TransitiveClosure[u][w] and TransitiveClosure[w][v]: TransitiveClosure[u][v] = 1 return TransitiveClosure
2. トップダウン アルゴリズム:
トップダウン アルゴリズムも推移的閉包アルゴリズムの実装方法であり、頂点の各ペアの到達可能性を再帰的に計算することにより、グラフの推移的閉包が構築されます。アルゴリズムの手順は次のとおりです。
以下は、入力として隣接行列 Graph と推移閉包行列 TransitiveClosure を使用する、トップダウン アルゴリズムの具体的なコード例です:
def transitive_closure(Graph, TransitiveClosure): num_vertices = len(Graph) for u in range(num_vertices): for v in range(num_vertices): if Graph[u][v]: TransitiveClosure[u][v] = 1 for w in range(num_vertices): for u in range(num_vertices): for v in range(num_vertices): if TransitiveClosure[u][w] and TransitiveClosure[w][v]: TransitiveClosure[u][v] = 1 return TransitiveClosure
3. 比較分析:
結論:
推移的閉包アルゴリズムの 2 つの実装方法、ボトムアップ アルゴリズムとトップダウン アルゴリズムは、時間計算量と空間計算量の点では基本的に同じですが、実際には、適用段階と初期段階では効率に差があります。特定の要件とグラフ サイズに基づいて適切な実装方法を選択し、操作効率とパフォーマンスを向上させます。
以上がボトムアップ アルゴリズムとトップダウン アルゴリズムを比較する推移的閉包アルゴリズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。