サイズnのすべての入力に対してO(n)で実行されるアルゴリズムがあり、その与えられたサイズnに対してO(n^2)の事前計算ステップの後でなければならないとします。アルゴリズムはO(n)とみなされ、O(n^2)は償却されますか?あるいは、Big Oはサイズnでアルゴリズムの「実行」を1つだけ考えるので、実際の表記法O(n + n^2)またはO(n^2)を作る表記法のステップが表記法に含まれていますか?事前計算はどのように複雑な表記法で処理されますか?
答えて
明示的にコストを2つの異なる部分に分けることによってこれが説明されることは珍しくありません。例えば、range minimum query problemでは、問題のO(n )、O(1)&時間解決策のようなものについて人々が話すのが一般的であり、O(n )事前計算コストとO(1)は参照コストを示します。文字列アルゴリズムの場合は、suffix tree provides an O(m)-preprocessing-time, O(n+z)-query-time solution to string searching、Aho-Corasick string matching offers an O(n)-preprocessing-time, O(m+z)-query-time solutionと表示されることがあります。
ここでのトレードオフは、実際にはユースケースに依存します。これは、前処理時間がそれに値するようになる前に、どれだけ多くのクエリを作成するかを定量的に測定することができます。
人々は通常、結果R
に得ることがステップAとB、そしてcomplexity(R) = complexity(A) + complexity(B)
を実行するためにあなたを必要とする場合、彼らはなど複雑したがって
について話しているとき、物事を成し遂げるために合計時間を気に。これは、特定の例ではO(n^2)
になります。
O
の分析では、最も急速に増加する用語が全体的な複雑さを支配していることに気付きました(つまり、パイプラインでは最もスループットが低いモジュールがスループットを定義します)。
しかし、それらが互いに素である場合、A
およびB
の複雑さ分析は通常、分離して実行されます。
要約すると、結果が得られるまでに要する時間ですが、お互いに独立した個別のステップについての理由を(通常は)行うことができます。
パイプラインの最も遅い部分だけを指定することはできません。簡単な例はBFSで、複雑さは
O(V + E)
です。
E = O(V^2)
以降、BFSの複雑さを
O(E)
(
E > V
以降)と書くことが魅力的かもしれません。ただし、エッジがないグラフがある可能性があるので、
が正しくないになります。そのような場合でも、すべての頂点を繰り返し処理する必要があります。
多くの特定のケースでは、O(n)がO(n^3)よりもかなり遅くなる可能性があるため、O(...)表記法はアルゴリズムの動作速度を測定するものではありません。 (n^3/2ステップで実行されるものに対して10^100 nステップで実行されるアルゴリズムを想像してください)。私のアルゴリズムはO(n^2)時間で実行されると伝えれば、 n = 1000の間に長くかかります。
O(...)のポイントは、入力サイズが大きくなったときのアルゴリズムの振る舞いを指定することです。私のアルゴリズムがO(n^2)時間で実行され、n = 500で実行するのに1秒かかるとすれば、n = 1000ではなく、1.5ではなく40で4秒がかかるでしょう。
あなたの質問に答えて - いいえ、アルゴリズムはO(n)にはなりません。なぜなら、私が入力サイズを2倍にすると、時間は4で乗算されるからです。 2。
- 1. 記事、カテゴリ、バージョン管理を扱う複雑なLinqクエリ
- 2. 複雑GROUPBYまたはピボット表計算
- 3. 複雑な計算
- 4. 2番目のループの複雑さはどのように計算されますか?
- 5. 複雑さの計算
- 6. アルゴリズムの時間複雑度を大きなオハイ表記で計算する
- 7. MNISTデータセットはどのようにMNISTチュートリアルで事前処理されていますか?
- 8. MVPでは、データモデルの複雑さはどのように処理され、どこでコントロールを動的に表示/非表示するのですか?
- 9. Apache Flink:ローカル事前集計でウィンドウを計算するにはどうすればよいですか?
- 10. この関数の時間複雑度はどのように計算されますか?
- 11. プログラムはアルゴリズムの複雑さを計算できますか?
- 12. SQL複雑な計算と
- 13. 複雑なイベント処理 - ストリーム処理
- 14. Big Oで表記された複雑さの一般的な名前はありますか?
- 15. 2Dプラットフォームゲームで複雑な入力を処理するにはどうすればよいですか?
- 16. 事前計算によるDoctrineフィルタリング
- 17. CreateViewに渡された値を事前処理する方法
- 18. マクロはどのようにプリプロセッサで処理されますか?
- 19. メッセージフレームはTransitでどのように処理されますか?
- 20. データはどのようにパイプで処理されますか?
- 21. Flink複雑なイベント処理
- 22. 複雑なイベント処理 - Esper
- 23. 以下のプログラムの時間の複雑さはどのように計算するのですか:
- 24. 複雑な論理演算
- 25. Rのオブジェクトサイズはどのように計算されますか?
- 26. サロゲートペアはどのように計算されますか?
- 27. emはどのように計算されますか?
- 28. Netlab - エラーはどのように計算されますか?
- 29. カフカオフセット値はどのように計算されますか?
- 30. 階乗はどのように計算されますか?
これは[Computer Science](http://cs.stackexchange.com)の交換サイトに適した理論的な質問です。 – tadman
そこに投稿します、ありがとう。 – amoffat