Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。116件2ハッシュ表のチェインほうで双方向リストのほうが優れている点はありますでしょうか?有名な教科書のMIT教科書アルゴリズムイントロダクション第3版のP213の図11.3の解説文。ハッシュ表をチェイン法で実装してる解説で疑問点があったので質問します。「連結リストは一方向、あるいは双方向であり、図は削除が高速にできる双方向連結リストである」という記述があります。一方向でも双方向でも実装ができるのはわかるのですが、「双方向のほうが削除が高速にできる」という記述の根拠がわかりません。双方向だとprevがあるから逆にたどれるというのはわかりますが、削除の際にリストをたどる方向は最初の要素から一方向に外に向かってというイメージなので逆方向にたどれるメリットを感じません。削除が高速にできるというのもわかりません。ちなみに英語版でも同様の解説でした。双方向のほうが削除が高速にできるという記述の根拠を教えてください。この記述や私の解釈がおかしければチェイン法における単方向、双方向リストのそれぞれのメリット・デメリットを教えてほしいです。票4双方向リストの削除という場合キーや位置を指定しての削除と、ノードそのものを指定しての削除とで考え方が違います。発見するのと変わりません。Naoさんが想定してるのはこちら。リストを辿って見つける必要がないので単方向リストより高速です。あれば双方向のほうが早くなります。型名等を省略した疑似コードではそこの部分がわかりづらくなってるので、注意深く見てみてください。C#の双方向リストに関するドキュメントですが、比較しやすく記載されていたので参考に貼っておきます。https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.linkedlist-1.remove?view=netframework-4.8ノードを指定して削除する場合の計算量はO(1)、値を指定して削除する場合O(n)となっています。個の銅バッジなるほど、ありがとうございます。いただいた説明や英語版の質問を読んで以下のように理解しました。それを使って削除するシーンってそんなにあるんですかね。大体はキーを指定して削除するような。オペレーションするときって、まずはuser_hash[user_id]のノードをO(N)で探索しますよね。そのあとでO(1)で削除。O(1)で削除できて今回の有用性が大変理解できます。単方向よりは素直にこれ使ったほうがいいでしょ、ということですかね。3:11実際の有用性という意味で見ると、双方向リストにすることにそれほどメリットはないと思います。一つは単方向リストでも削除は検索と同じ計算量ででき、たいていはそれで充分という点です(うまく実装すれば平均O(1)。その場合でも最悪O(N)なので双方向リストを使うことで最悪O(1)に改善できる)。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。ついて0データベースから取得したオブジェクト同士の親子関係をハッシュで表現したい3ErrorSortがなぜ、役に立たないのか教えてください。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。