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(1)
の簡単な例はreturn 23;
かもしれません-入力が何であれ、これは固定された有限の時間で戻ります。
O(N log N)
の典型的な例は、適切なアルゴリズム(たとえば、mergesort)で入力配列をソートすることです。
O(log N)
が二分法でソートされた入力配列の値を検索する場合の典型的な例。
O(1) - most cooking procedures are O(1), that is, it takes a constant amount of time even if there are more people to cook for (to a degree, because you could run out of space in your pot/pans and need to split up the cooking)
O(logn)-電話帳で何かを見つけます。バイナリ検索を考えてください。
O(n)-本を読んでください。nはページ数です。本を読むのにかかる最小時間です。
O(nlogn)-マージまたはクイックソートを実行してカードをソートしない限り、nlognである毎日の何かをすぐに考えることはできません!
一般的なアルゴリズムを提供できます...
これは宿題/インタビューのような質問のように聞こえるので、これらは直感的な反応です。より具体的なものを探している場合、一般の人々は一般的なアプリケーションの基礎となる実装(もちろんオープンソースの節約)を知らないため、一般的な概念は「アプリケーション」にも当てはまらないため、少し難しくなります。
O(1)-二重リンクリストから要素を削除します。例えば.
typedef struct _node {
struct _node *next;
struct _node *prev;
int data;
} node;
void delete(node **head, node *to_delete)
{
.
.
.
}
O(1): finding the best next move in Chess (or Go for that matter). As the number of game states is finite it's only O(1) :-)
次のアルゴリズムをリストに追加できます。
O(1)
-数値が偶数か奇数かを判断します。 HashMapでの作業
O(logN)
-x ^ Nの計算、
O(N Log N)
-最長増加サブシーケンス
ソフトウェアアプリケーションの複雑さは測定されておらず、big-O表記では書かれていません。アルゴリズムの複雑さを測定し、同じドメイン内のアルゴリズムを比較することのみが有用です。ほとんどの場合、O(n)と言うときは、「O(n)comparisons」または「O(n)算術演算」であることを意味します。つまり、アルゴリズムやアプリケーションのペアを比較することはできません。
O(n log n)は、任意のセットをソートできる速度の上限として有名です(高度な並列コンピューティングモデルではなく、標準を想定)。
O(2N)
O(2N)は、入力データセットへの各加算で成長が2倍になるアルゴリズムを示します。 O(2の成長曲線N)関数は指数関数的です-非常に浅いところから始まり、その後、気象的に上昇します。 O(2の例N)関数はフィボナッチ数の再帰計算です:
int Fibonacci (int number)
{
if (number <= 1) return number;
return Fibonacci(number - 2) + Fibonacci(number - 1);
}
0(logn)-バイナリ検索、配列内のピーク要素(複数のピークが存在する場合があります)0(1)-in pythonリストまたは文字列の長さを計算します。 len()関数は0(1)時間かかります。配列内の要素にアクセスするには、0(1)時間かかります。スタック内のプッシュ操作には0(1)時間かかります。 0(nlogn)-ソートをマージします。 pythonでのソートにはnlogn時間かかります。したがって、listname.sort()を使用すると、nlogn時間かかります。
注-ハッシュテーブルでの検索には、衝突のために一定の時間がかかる場合があります。