[解決済み】big-O時間複雑度の高いアルゴリズムが低いアルゴリズムより好ましいと思うケースはありますか?
2022-04-20 09:21:47
質問
を希望するケースはありますか?
O(log n)
よりも時間の複雑さ
O(1)
時間の複雑さ?それとも
O(n)
から
O(log n)
?
何か例はありますか?
どのように解決するのですか?
時間計算量Oが大きいアルゴリズムを、小さいアルゴリズムより優先する理由はたくさんあるはずです。
- ほとんどの場合、低いBig-O複雑度は実現が難しく、熟練した実装と多くの知識、そして多くのテストが必要です。
-
big-Oは、定数に関する詳細を隠します。
: で実行するアルゴリズムです。
10^5
は、big-O の観点からは1/10^5 * log(n)
(O(1)
対O(log(n)
) が、ほとんどの合理的なn
の方が性能が良い。例えば、行列の乗算に最適な複雑さはO(n^2.373)
が、この定数は非常に高いので、(私の知る限り)どの計算ライブラリも使っていません。 -
big-Oは、何か大きなものの上で計算するときに意味があります。もし3つの数値からなる配列をソートする必要があるのなら
O(n*log(n))
またはO(n^2)
のアルゴリズムを使用します。 -
小文字の時間複雑性の利点は、時には本当に無視できるほど小さいことがあります。例えば
例えば、タンゴツリーというデータ構造があります。
を与える。
O(log log N)
の時間複雑性を持つが、同じ項目を見つける二分木もある。O(log n)
. 膨大な数のn = 10^20
は、その差はごくわずかです。 -
時間の複雑さがすべてではありません。で実行されるアルゴリズムを想像してください。
O(n^2)
を必要としO(n^2)
のメモリが必要です。よりも望ましいかもしれません。O(n^3)
時間とO(1)
があまり大きくない場合は、スペースが必要です。問題は、長い時間待つことはできますが、あなたのアルゴリズムでそれを使用するのに十分な大きさのRAMを見つけることができるかどうか非常に疑わしいということです。 - 並列化は分散型の世界では良い機能です。簡単に並列化できるアルゴリズムもあれば、全く並列化できないアルゴリズムもあります。複雑度の高い1000台のコモディティマシンでアルゴリズムを実行する方が、少し複雑度の高い1台のマシンを使うより意味がある場合もあります。
- <ストライク ある場所(セキュリティ)では、複雑さが要求されることがあります。ハッシュアルゴリズムが非常に高速であることは、誰も望んでいません(他の人がより速くブルートフォースできるからです)。
- 複雑さとは関係ありませんが、セキュリティ関数のいくつかは、次のような書き方をすべきです。 タイミング攻撃防止 . これらはほとんど同じ複雑さクラスのままですが、何かをするときに常に悪いケースを取るように変更されています。その一例が、文字列が等しいかどうかの比較です。ほとんどのアプリケーションでは、最初のバイトが異なる場合、高速にブレークすることは理にかなっていますが、セキュリティでは、悪い知らせを伝えるために、まだ最後まで待つことになります。
- 誰かが低複雑度アルゴリズムの特許を取得し、企業にとってはお金を払うより高複雑度を使った方が経済的です。
-
特定の状況にうまく適応するアルゴリズムもあります。例えば挿入ソートは、平均的な時間-複雑さが
O(n^2)
は、クイックソートやマージソートより劣りますが オンラインアルゴリズム 他の多くのアルゴリズムが完全な値のリストに対してのみ効率的に操作できるのに対し、(ユーザーの入力として) 受信した値のリストを効率的にソートすることができます。
関連
-
[解決済み] O(log n)とは具体的にどのような意味ですか?
-
[解決済み] ゲーム「2048」の最適なアルゴリズムとは?
-
[解決済み] Pythonスクリプトのプロファイリングはどのように行うのですか?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] ヒープの構築はどうして時間計算量O(n)になるのですか?
-
[解決済み] 再帰的関数の複雑さの決定(Big O記法)
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】アルゴリズムの時間複雑性を求めるには?
-
[解決済み] 2^nとn*2^nは同じ時間複雑性か?
-
[解決済み] LINQメソッドの実行時の複雑さ(Big-O)にはどのような保証があるのでしょうか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ソートされていない配列でバイナリサーチは使えるか?重複
-
[解決済み] TSPの場合、Held-Karpアルゴリズムは、Brute-forceのO(n!)からO(2^n*n^2)に時間複雑性をどのように減少させるのでしょうか?[クローズド]
-
[解決済み] 再帰の複雑さ T(n) = T(n-1) + T(n-2) + C
-
[解決済み】Redisに使用されている基礎的なデータ構造は何ですか?
-
[解決済み】背景色からフォントカラーを決定する方法
-
[解決済み】ssl証明書はどのように検証されるのですか?
-
[解決済み】丸められたパーセンテージを100%にする方法
-
[解決済み】セグメントツリー、インターバルツリー、バイナリーインデックスツリー、レンジツリーの違いは何ですか?
-
[解決済み】HSLからRGBへの色変換
-
[解決済み】固定長 6 int 配列の最速ソート