グラフを表現する方法は2つあります.1つは行列を使用し、もう1つはリストを使用することです。線形時間でグラフを逆転させるには?
私が行列を使用する場合、行列のすべてのビットを反転する必要があります。それはO(V^2)時間かかりませんか?
私はリストを使用している場合は、私は、一つ一つがそれぞれのリストを横断して、新しいセットを作成する必要はありませんでしょうか?それは直線的なO(V + E)時間を取るように思われる。私は正しいですか?
私はここで別の質問があります。たとえば、グラフ(マトリックスまたはリストのいずれか)にDijkstraアルゴリズムを使用し、シーンの背後にあるデータ構造に優先キューを使用するとします。グラフの表現とデータ構造の関係はありますか?それはアルゴリズムのパフォーマンスに影響を与えますか?
私が表現してダイクストラアルゴリズムのための優先順位キューのリストを使用していたと仮定し、ダイクストラのための行列と利用プライオリティキューの違いがあるでしょうか?
私はそれだけでmakeQueue
操作に関連すると思いますか?それとも全く違うのではないでしょうか?
隣接リストのトラバーサルは、E = O(V^2)などの一般的な線形時間では発生しません。 – collapsar
@ collapsar It * always *は、頂点*とエッジ*との関係で線形時間に発生します。時間の複雑さを定義するのは、時間の複雑さを明示的に述べることなく、入力の一部(つまり、ちょうど頂点)で定義することは、時間が入力の別の部分に直接関係している場合には、あなたがしたように人々はそれを定義することができます)。そしてE = O(V^2)は密なグラフのためのものです。スパースグラフはE = O(V)です。 – Dukeling
@dukeling問題の「サイズ」を単一のスカラーに減らすことは、精度の欠如を伴うことを指摘しています。 otoh、big-Oh表記は最悪の場合を記述し、グラフを考慮して、追加の制約なしに最悪の場合はE = O(V^2)を意味する。正確には、O(V^2)は隣接行列上のエッジの逆転に対しても正しくない - 表現がフラグ行 - メジャーとコ - メジャーをスポーツする場合、転置はO(1)である。 – collapsar