面接の準備とグラフの実装のレビューを行っています。私が見続けている大きなものは、隣接リストと隣接行列です。基本的な操作の実行時間を考えると、ハッシュが使用されているデータ構造が見られないのはなぜですか?
たとえば、Java では、隣接リストは一般的ArrayList<LinkedList<Node>>
に ですが、なぜ人々は を使用しないのHashMap<Node, HashSet<Node>>
でしょうか?
n = ノード数、m = エッジ数とします。
どちらの実装でも、ノード v を削除するには、すべてのコレクションを検索して v を削除する必要があります。隣接リストでは O(n^2) ですが、「隣接セット」では O(n) です。同様に、エッジを削除するには、v のリストからノード u を削除し、u のリストからノード v を削除する必要があります。隣接リストでは O(n) ですが、隣接セットでは O(1) です。ノードの後継ノードの検索、2 つのノード間にパスが存在するかどうかの検索などの他の操作は、両方の実装で同じです。空間複雑度も両方とも O(n + m) です。
私が考えることができる隣接セットの唯一の欠点は、ノード/エッジの追加が O(1) に償却されることですが、隣接リストでそうすることは本当に O(1) です。
おそらく、私は何かを見ていないか、ランタイムを計算するときに物事を考慮するのを忘れていたので、私に知らせてください.