私たちが日常的に使用する、O(1)、O(n log n)、O(log n) の複雑さを持つアルゴリズムにはどのようなものがありますか?
ベストアンサー1
質問に示されている時間計算量を持つアルゴリズム/ステートメントのグループの例が必要な場合は、ここに小さなリストがあります -
O(1)
時間
- 配列インデックスへのアクセス (int a = ARR[5];)
- リンクリストにノードを挿入する
- スタックへのプッシュとポップ
- キューへの挿入と削除
- 配列に格納されたツリー内のノードの親または左/右の子を見つける
- 二重リンクリストの次/前の要素へのジャンプ
O(n)
時間
簡単に言えば、すべてのブルートフォースアルゴリズム、または線形性を必要とする初心者向けのアルゴリズムは、O(n)の時間計算量に基づいています。
- 配列の走査
- リンクリストの走査
- 線形探索
- リンクリスト内の特定の要素の削除(ソートなし)
- 2つの文字列を比較する
- 回文のチェック
- カウント/バケットソート、ここでもこのような例が 100 万件以上見つかります...
O(log n)
時間
- バイナリ検索
- 二分探索木で最大/最小の数を見つける
- 線形機能に基づく特定の分割統治アルゴリズム
- フィボナッチ数の計算 - 最良の方法ここでの基本的な前提は、完全なデータを使用しないことと、反復ごとに問題のサイズを縮小することです。
O(n log n)
時間
「log n」の係数は、分割統治法を考慮して導入されます。これらのアルゴリズムの中には、最も最適化されたものがあり、頻繁に使用されます。
- マージソート
- ヒープソート
- クイックソート
- O(n^2)アルゴリズムの最適化に基づく特定の分割統治アルゴリズム
O(n^2)
時間
これらは、O(nlogn) の同等のアルゴリズムが存在する場合、効率の低いアルゴリズムであると考えられます。一般的な適用方法は、ここではブルート フォースです。
- バブルソート
- 挿入ソート
- 選択ソート
- 単純な2D配列の走査
O(n!)
時間
- 総当たり探索による巡回セールスマン問題の解決
- 部分的に順序付けられた集合のすべての無制限の順列を生成する。
- ラプラス展開による行列式の求め方
- セットのすべてのパーティションを列挙する