procedure max (a[1..n]: integers)
max := a[1]
for i := 2 to n
if max < a[i] then max := a[i]
複雑さですか、O(1)
それともO(n)
最良のシナリオですか? シーケンスにはn
要素が含まれています。擬似コードです。
procedure max (a[1..n]: integers)
max := a[1]
for i := 2 to n
if max < a[i] then max := a[i]
複雑さですか、O(1)
それともO(n)
最良のシナリオですか? シーケンスにはn
要素が含まれています。擬似コードです。
このアルゴリズムでは、最良の場合と最悪の場合の漸近的な実行時間に違いはありません。いずれの場合も、配列全体 (n
要素) をトラバースする必要があり、アルゴリズムは O(n) になります。
理論的には、任意の配列の最大要素を O(n) 未満で見つける方法はありません。これは、常に各要素に少なくとも 1 回アクセスする必要があるためです。
アルゴリズムはO(n)
、最良の場合、平均的な場合、および最悪の場合です。また、使用すべき場所を参照して使用するだけなので、機能しません。a1
<
>
O(n) - n 個の要素、または n 倍 (n/2、n/4 など) をスキャンする必要がありますが、それでも O(n) です。
大まかに言えば、O(1) は、入力のサイズに関係なく、固定数のステップでソリューションを実装できることを意味します。
O(n) は、n 個の入力がある場合、解が An ステップで実装されることを意味します (A は数値であり、別の変数ではありません)。明らかに、2 から n までカウントする for ループがある場合、つまり n サイクルです。つまり、入力要素が An の場合、ループは 2 から An までカウントします。つまり、入力と同じレベルにあることを意味します。 O(n)です。しかし、それがリニアスキャンのやり方です。:)
配列全体をトラバースする必要があります。したがって、複雑さは O(n) になります。
次のようなコードがある場合:
for i := 2 to n
その場合、そのコードは O(n) ベストケースになります。
なぜ一定時間だと思うのですか?
の上)
配列がソートされていれば O(1) を達成できるので、最後の要素を返すだけです。
しかし、ランダムに配置された要素では、この問題の最適な順序は O(n) です