O(1)、O(n log n)、O(log n)の計算量を持つアルゴリズムの例 質問する

O(1)、O(n log n)、O(log n)の計算量を持つアルゴリズムの例 質問する

私たちが日常的に使用する、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!)時間

  • 総当たり探索による巡回セールスマン問題の解決
  • 部分的に順序付けられた集合のすべての無制限の順列を生成する。
  • ラプラス展開による行列式の求め方
  • セットのすべてのパーティションを列挙する

おすすめ記事