配列は次のように宣言されていますか:
int array[M]
、O(1)
スペース内またはO(n)
?ここで、Mは固定値です。O(n)
それは単一の変数ではなく、配列全体であるため、私には理にかなっています。O(1)
でも、サイズが決まっていて変わらないから かもしれないと思います!
3 に答える
配列が固定サイズであり、入力のサイズによって変化しない場合は、定数として=O(1)
として表すことができるため、配列は変化しません。例として、100万(またはその他の任意の数)の整数を実行するアルゴリズムで状態を保持するためにサイズ5の配列が必要な場合があります。重要なことは、独立していることです。c * O(1)
O(1)
c
M
N
ただしM
、入力のサイズまたは入力サイズに直接依存する値(N/2
または他の線形関数)を表す場合は、実際には、入力サイズM
とともにN
大きくなるため、になりますO(N)
。例としては、アルゴリズムを実行する(つまり、二乗の合計を決定する)すべての入力数値を保持する配列があります。
Mが定数の場合、O(1)と言います。O(n)の場合、そのサイズはMの線形関数である必要がありますが、この場合はそうではありません。
あなたが与えられた他の答えは正しいです、正式にはそれはO(1)です。
ただし、「定数」の意味については慎重に検討してください。O(...)表記は、実際のコンピュータープログラムのパフォーマンスを測定するためのものではなく、アルゴリズムを複雑さによって分類するためのものです。
オブジェクトの配列でそれぞれを1回だけ読み取るアルゴリズムを実装している場合(たとえば)、「OK、要素の数をNに固定しましょう」と言うことができますが、それではアルゴリズムはO(1)複雑度クラス、アルゴリズムは引き続きO(n)ですが、テストケースをn = Nに制限しています。ここで、Nは固定されています。