これは、おそらく最適な解決策がない問題です。有向グラフがあり、サイクルがあるかどうかわからないとします (サイクル検出は、この問題の側面の 1 つになります)。一連の頂点 (おそらく数百万の頂点) が与えられた場合、特定のグラフのすべての一意のペア間のすべての個別のパス (重複する頂点のないパス) をカウントする必要があります。この状況にどう立ち向かうか。
これを行うための強引な方法を見てみましょう。
グラフからすべての可能なペアを計算します。
グラフのペアごとに、DFS を使用してソースから宛先へのすべてのパスを取得します。
- ペアがハッシュ テーブルで表されていると仮定すると、このペアに対する値としてパス カウントを入れます。
- 残りのペアについて繰り返します。
これで問題が発生する可能性があることを指摘できますか? この問題をこのように考えてみましょう。地球上のすべての都市間のすべての個別の経路を見つける計算上の課題は何ですか?また、この問題を解決しようとする場合、どこから始めればよいでしょうか?
編集:提示されたアルゴリズムの一部は、O(n!) 階乗時間で結果を生成します。これは、処理するリソースが限られている単一のマシンにとっては、やや困難な計算です。グラフ トラバーサルの問題を小さなチャンクに分割するための map-reduce テクニックを知っている人はいますか?