以下は消費税です。
G を n 個の頂点と m 個の辺を持つ重み付き有向グラフとし、すべての辺に正の重みを付けます。有向サイクルは、同じ頂点で開始および終了し、少なくとも 1 つのエッジを含む有向パスです。O(n^3) アルゴリズムを与えて、最小総重量の G の有向サイクルを見つけます。O((n^2)*m) アルゴリズムには部分的なクレジットが与えられます。
これが私のアルゴリズムです。
私はしDFS
ます。を見つけるたびにback edge
、有向サイクルがあることがわかります。
parent array
次に、 (サイクル内のすべての頂点を移動するまで) に沿って一時的に逆戻りし、を計算しtotal weights
ます。
total weight
次に、このサイクルの を と比較しmin
ます。min
は常に最小の総重量を取ります。DFS が終了すると、最小有向サイクルも検出されます。
では、時間の複雑さについてです。
正直なところ、私のアルゴリズムの時間計算量はわかりません。
DFS の場合、トラバーサルには O(m+n) かかります (m がエッジの数で、n が頂点の数の場合)。頂点ごとに、その祖先の 1 つを指す場合があり、循環を形成します。サイクルが見つかった場合、重みの合計を合計するには O(n) かかります。
したがって、合計時間は O(m+n*n) だと思います。しかし、物品税に記載されているように、最適な時間は O(n^3) であり、通常の時間は O(m*n^2) であることは明らかです。
誰でも私を助けることができます:
- 私のアルゴリズムは正しいですか?
- アルゴリズムが正しい場合、時間計算量はどのくらいですか?
- この問題に対するより良いアルゴリズムはありますか?