いいえ、コードの時間の複雑さはO(2^|<DeltaTime>|)
、
現在時刻の適切なコーディングについて。
まず、私の英語をお詫び申し上げます。
CSでのBig Oとは
Big O表記は、プログラムの入力とその実行時間を結び付けるために使用されません。
Big O表記は、厳密さを残して、2つの量の漸近比を表す方法です。
アルゴリズム分析の場合、これらの2つの量は入力ではなく(最初に「メジャー」関数が必要)、実行時間ではありません。
それらは、問題1のインスタンスのコーディングの長さと、対象のメトリックです。
一般的に使用される指標は
- 特定の計算モデルでアルゴリズムを完了するために必要なステップ数。
- そのような概念が存在する場合、計算モデルが必要とするスペース。
最初のポイントが遷移2関数の適用回数、つまり「ステップ」に変換され、2番目のポイントが少なくとも1回書き込まれたさまざまなテープセルの数に変換されるように、モデルとして暗黙的にTMが想定されます。
多くの場合、元のエンコーディングの代わりに多項式関連のエンコーディングを使用できると暗黙のうちに想定されていますか。たとえば、配列を最初から最後まで検索する関数は、そのO(n)
ような配列のインスタンスのコーディングの長さがn*b+(n-1)
ここb
で、は各要素のシンボルの(定数)数です。これは、b
が計算モデルの定数と見なされるため、上の式とn
漸近的に同じだからです。
これはまた、トライアルディビジョンのようなアルゴリズムが、本質的には類似のアルゴリズムであるにもかかわらず、指数アルゴリズムであることを説明していfor(i=2; i<=sqr(N); i++)
ます3。
参照してくださいこれを。
これはまた、大きなO表記は、問題を説明するために必要な数のパラメーターを使用する可能性があることを意味します。一部のアルゴリズムではkパラメーターを持つことは珍しくありません。
したがって、これは「入力」または「入力がない」ということではありません。
今の研究事例
Big O表記は、アルゴリズムに疑問を投げかけるものではなく、単に何をしているのかを知っていると仮定しているだけです。それは本質的にあらゆる場所に適用可能なツールであり、故意にトリッキーな(あなたのような)アルゴリズムにも適用できます。
問題を解決するために、現在の日付と将来の日付を使用したので、それらはどういうわけか問題の一部であるに違いありません。簡単に言うと、それらは問題のインスタンスの一部です。
具体的には、インスタンスは次のとおりです。
<DeltaTime>
ここで、<>
手段とは、任意の非病理的な選択のコーディングを意味します。
非常に重要な説明については、以下を参照してください。
したがって、O(2^|<DeltaTime>|)
現在の時間の値に依存する多数の反復を実行するため、大きなOの複雑度の時間はちょうどになります。漸近表記は定数を削除するため便利です(たとえば、の使用O(10^|<DeltaTime>|*any_time_unit)
は無意味です)ので、他の数値定数を置く意味はありません。
トリッキーな部分はどこですか
上記の重要な仮定の1つを作成しました。計算モデルは5時間を意味し、時間によって私は(実際の?)物理時間を意味します。標準的な計算モデルにはそのような概念はありません。TMは時間を知りません。これが私たちの現実が機能する方法であるため、時間とステップ数を関連付けます4。
モデルでは時間は計算の一部ですが、Mainは純粋ではないが概念は同じであると言うことで、機能的な人々の用語を使用できます。
これを理解するには、フレームワークが物理的な時間の2倍、5倍、10倍速い偽の時間を使用することを妨げるものがないことに注意する必要があります。このようにして、コードは「時間」の「半分」、「1/5」、「1/10」で実行されます。
このリフレクションは、のエンコーディングを選択するために重要です<DeltaTime>
。これは、本質的に<(CurrentTime、TimeInFuture)>を書くための凝縮された方法です。事前には時間が存在しないため、CurrentTimeのコーディングは、Now(または他の任意の選択)を前日のようにコーディングして、昨日としてコーディングすることができます。これにより、コーディングの長さが増加するという仮定が破られます。、物理的な時間として進む(そしてDeltaTimeの1つが減少する)
何か有用なことをするために、計算モデルで時間を適切にモデル化する必要があります。
私たちができる唯一の安全な選択は、物理的な時間ステップが進むにつれて、長さが増すタイムスタンプをエンコードすることです(ただし、単項を使用しません)。これは私たちが必要とする唯一の真の時間特性であり、エンコーディングがキャッチする必要のある特性です。アルゴリズムに時間の複雑さが与えられる可能性があるのは、このタイプのエンコーディングでのみですか?
あなたの混乱は、もしあれば、ワードという事実から生じた時間の句で「そのある何時間複雑?」と 'どのくらいの時間がかかりますか?」非常に異なることを意味します
悲しいことに同じ用語を使用していますが、「ステップの複雑さ」を頭の中で試してみて、もう一度質問してください。答えが本当に^ _ ^であることを理解するのに役立つと思います
1これはまた、各インスタンスの長さが異なるが任意ではないため、漸近的なアプローチの必要性を説明します。
2ここで正しい英語の用語を使用しているといいのですが。
3また、これがlog(log(n))
数学で用語を見つけることが多い理由でもあります。
4間違いなく、ステップは、有限の時間間隔を占有する必要がありますが、ヌルでも接続でもありません。
5これは、その中の物理的な時間の知識としての計算モード、つまり、それをその用語で表現できることを意味します。アナロジーは、ジェネリックが.NETフレームワークでどのように機能するかです。
O(N)
複雑ではありませんO(1)