[解決済み] std::list::reverse の計算量が O(n) であるのはなぜですか?
2022-04-18 13:46:07
質問
の逆機能はなぜですか?
std::list
のクラスは線形実行時間なのでしょうか?2重リンクリストの場合、逆関数はO(1)であるべきだったと思うのですが。
2重リンクリストの反転は、先頭と末尾のポインタを入れ替えるだけでよいはずです。
どのように解決するのですか?
仮の話です。
reverse
は、もしかしたら
O(1)
. また、リンクリストの方向が現在、リストが作成された元の方向と同じか反対かを示すブール値のリストメンバーがあったかもしれません(再び仮定的に)。
残念ながら、その場合、基本的に他のすべての操作のパフォーマンスが低下します(漸近的な実行時間は変わらないとはいえ)。各操作において、リンクの "next"または "prev"のポインターに従うかどうかを考慮するために、ブール値を参照する必要があります。
これは比較的まれな操作と考えられていたため、規格(実装を指示するのではなく、複雑さのみを指示する)は、複雑さを線形にすることができると指定しました。これにより、"next"ポインターは常に同じ方向を明確に意味するようになり、一般的なケースの操作が高速化されました。
関連
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】'cout'は型名ではない
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] template "と "typename "キーワードはどこに、なぜ入れなければならないのですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】int a[] = {1,2,}; なぜイニシャライザーリストの最後のカンマは許されるのでしょうか?
-
[解決済み] リンクリストの途中への挿入はなぜO(1)なのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む