O(1)、O(n log n)、O(log n)の複雑さを備えた、私たちが毎日使用するいくつかのアルゴリズムは何ですか?
O(1)、O(n log n)、O(log n)の複雑さを備えた、私たちが毎日使用するいくつかのアルゴリズムは何ですか?
回答:
質問で与えられた時間の複雑さを伴うアルゴリズム/ステートメントのグループの例が必要な場合は、ここに小さなリストがあります-
O(1)
時間O(n)
時間簡単に言えば、すべてのブルートフォースアルゴリズム、または線形性を必要とするNoobアルゴリズムは、O(n)時間の複雑さに基づいています。
O(log n)
時間O(n log n)
時間「log n」の要素は、分割統治を考慮することによって導入されます。これらのアルゴリズムのいくつかは最適化されたもので、頻繁に使用されます。
O(n^2)
時間これらのO(nlogn)対応物が存在する場合、これらのアルゴリズムは効率の低いアルゴリズムになるはずです。一般的なアプリケーションは、ここではブルートフォースです。
O(log n)
リストがリストの前になるように切り替えO(n)
て、リストが最高から最悪の順になるようにしてほしいと思っています。笑:)
簡単な例ではO(1)
あるかもしれないreturn 23;
-何でも入力、これは、固定された、有限の時間に戻ります。
の典型的な例はO(N log N)
、優れたアルゴリズム(たとえば、mergesort)で入力配列をソートすることです。
O(log N)
ソートされた入力配列の値を二分法で検索する場合の典型的な例です。
O(1)-ほとんどの調理手順はO(1)です。つまり、調理する人がもっと多くても、一定の時間がかかります(ポット/鍋のスペースが不足する可能性があるため、ある程度)そして料理を分割する必要があります)
O(logn)-電話帳で何かを見つけます。バイナリ検索を考えてください。
O(n)-本を読む。nはページ数です。本を読むのにかかる最小時間です。
O(nlogn)-マージまたはクイックソートを実行してカードをソートしない限り、nlognである毎日のようなことをすぐに考えることはできません。
O(1):チェス(またはその点ではGo)で次の最善の動きを見つける。ゲームの状態数は有限なので、O(1)のみです:-)
O(1)
ナノ秒しか生きないということです、そしてあなたはきっとどちらO(1)
が最初に起こるかを確かに知っています...
ソフトウェアアプリケーションの複雑さは測定されておらず、big-O表記法で記述されていません。アルゴリズムの複雑さを測定し、同じドメイン内のアルゴリズムを比較する場合にのみ役立ちます。おそらく、O(n)と言うときは、「O(n)比較」または「O(n)算術演算」であることを意味します。つまり、アルゴリズムまたはアプリケーションのペアを比較することはできません。
0(logn)-バイナリ検索、配列内のピーク要素(複数のピークが存在する場合があります)0(1)-リストまたは文字列の長さを計算するPython。len()関数は0(1)時間かかります。配列の要素へのアクセスには0(1)時間かかります。スタックでのプッシュ操作には0(1)時間かかります。0(nlogn)-マージソート。Pythonでの並べ替えには、nlogn時間かかります。したがって、listname.sort()を使用すると、nlogn時間がかかります。
注-ハッシュテーブルでの検索は、衝突が原因で、一定以上の時間がかかることがあります。
O(2 N)
O(2 N)は、入力データセットへの各追加で成長が倍になるアルゴリズムを示します。O(2 N)関数の成長曲線は指数関数的です-非常に浅いところから始まり、その後気象的に上昇します。O(2 N)関数の例は、フィボナッチ数列の再帰的な計算です。
int Fibonacci (int number)
{
if (number <= 1) return number;
return Fibonacci(number - 2) + Fibonacci(number - 1);
}
Tower of Hanoi
より良い例でしょう。