[解決済み] O(log n)とは具体的にどういう意味ですか?
質問
Big O記法の実行時間と償却時間について学習中です。 の考え方は理解しています。 O(n) 線形時間とは、入力の大きさがアルゴリズムの成長に比例して影響することを意味します。 O(n 2 ) などなど、順列生成器のようなアルゴリズムでも O(n!) 回、階乗で増えていく。
例えば、次のような関数があります。 O(n) なぜなら、アルゴリズムは入力に比例して大きくなるからです n :
f(int n) {
int i;
for (i = 0; i < n; ++i)
printf("%d", i);
}
同様に、ネストされたループがあった場合、時間はO(n 2 ).
しかし、具体的にどのような O(log n) ? 例えば、完全な二分木の高さは、どういう意味かというと O(log n) ?
Logarithmが何であるかは(あまり詳しくはないかもしれませんが)知っています。 <サブ 10 100=2ですが、対数時間を持つ関数の同定方法がわかりません。
どのように解決するのですか?
<ブロッククオート対数時間による関数の同定方法がわかりません。
対数実行時間関数の最も一般的な属性は、次のとおりです。
- あるアクションを実行するための次の要素の選択が、いくつかの可能性のうちの1つであること。
- を1つだけ選択する必要があります。
または
- アクションが実行される要素がnの桁である場合
このため、例えば電話帳で人を調べるのはO(log n)となる。を確認する必要はない。 あらゆる その代わりに、名前のアルファベット順の位置から探すことで、単純に分割統治することができ、最終的に誰かの電話番号を見つけるまでに、各セクションの部分集合を探索する必要があるだけです。
もちろん、電話帳が大きくなっても時間はかかりますが、追加されたサイズに比例して急激に大きくなるわけではありません。
電話帳の例を発展させて、他の種類の操作の比較や その の実行時間です。ここでは、電話帳に ビジネス (イエローページ)は、一意な名前と 人 (ホワイトページ)は、一意の名前を持たない場合があります。電話番号は、最大でも1人の個人または企業に割り当てられます。また、特定のページをめくるのに一定の時間がかかると仮定します。
電話帳に対して行うであろういくつかの操作の実行時間を、速いものから順に並べてみました。
-
O(1)(最悪の場合)。 あるビジネスの名前が載っているページとビジネス名が与えられたら、電話番号を見つけなさい。
-
O(1)(平均的な場合)です。 ある人の名前が入っているページとその人の名前が与えられたら、電話番号を求めなさい。
-
O(log n)である。 ある人物の名前が与えられたとき、まだ検索していない本の部分の約半分のポイントをランダムに選び、そのポイントにその人物の名前があるかどうかを確認することによって、電話番号を見つける。そして、その人物の名前がある部分の約半分まで同じことを繰り返す。(これが人名の2値検索である)。
-
O(n)です。 電話番号に数字の "5" が含まれる人をすべて探しなさい。
-
O(n)です。 電話番号が与えられたら、その番号を持つ人物や企業を探す。
-
O(n log n)である。 印刷所で手違いがあって、うちの電話帳は全部のページがランダムな順番で挿入されているんだ。各ページの最初の名前を見て、そのページを新しい空の電話帳の適切な場所に置くことで、順序を正しく修正する。
以下の例では、今、印刷所に来ています。電話帳はそれぞれの住民や会社に郵送されるのを待っており、それぞれの電話帳には郵送先を示すステッカーが貼られています。電話帳は1人または1事業所に1冊ずつ配られます。
-
O(n log n)である。 電話帳をパーソナライズしたいので、指定されたコピーから各個人や企業の名前を探し出し、電話帳の中でその名前を丸で囲み、ご愛顧に感謝する短い文章を書きます。
-
O(n 2 ): 会社でミスがあり、各電話帳の電話番号の末尾に"0"が余分についています。ホワイトアウトで0を消してください。
-
O(n - n!)です。 電話帳を出荷ドックに積み込む準備が整いました。残念なことに、本を積むはずのロボットがおかしくなってしまったのだ。さらに悪いことに、すべての本をトラックに積んでから、順番が正しいかどうかを確認し、正しくない場合は本を降ろしてやり直すのです。(これは恐ろしい ボゴソート .)
-
O(n n ): あなたはロボットを修理して、正しく物を積めるようにしました。翌日、同僚の一人があなたにいたずらをし、搬入口ロボットを自動印刷システムに接続しました。ロボットがオリジナルの本を積み込もうとするたびに、工場の印刷機がすべての電話帳を複製してしまうのです。幸い、ロボットのバグ検出システムは高度なもので、積み込み用の複製本を見つけたときにさらに印刷しようとすることはありませんでしたが、それでも印刷されたすべてのオリジナル本と複製本を積み込まなければならないのです。
関連
-
[解決済み] 再帰の複雑さ T(n) = T(n-1) + T(n-2) + C
-
[解決済み] ループ不変量によるマージソートの正しさの証明 (初期化 , 保守 , 終了)
-
[解決済み] ゲーム「2048」の最適なアルゴリズムとは?
-
[解決済み] 末尾再帰とは何ですか?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み】アルゴリズムの時間複雑性を求めるには?
-
[解決済み】Θ(n)とO(n)の違いは何ですか?)
-
[解決済み】有向グラフのサイクルを検出する最適なアルゴリズム【クローズド
-
[解決済み】整数の流れから実行中央値を求める
-
[解決済み】純粋な関数型プログラミングの効率性
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 整数が [1,100] の範囲にあるとき、100万個の整数を最も速くソートする方法は何ですか?
-
[解決済み] ソートされていない配列でバイナリサーチは使えるか?重複
-
[解決済み] TSPの場合、Held-Karpアルゴリズムは、Brute-forceのO(n!)からO(2^n*n^2)に時間複雑性をどのように減少させるのでしょうか?[クローズド]
-
[解決済み] 大きなӨ記号は具体的に何を表すのですか?
-
[解決済み] O(log n)とは具体的にどういう意味ですか?
-
[解決済み】ループ不変量って何?
-
[解決済み】背景色からフォントカラーを決定する方法
-
[解決済み】整数の流れから実行中央値を求める
-
[解決済み】遺伝的アルゴリズム/遺伝的プログラミングの良い解決例とは?[クローズド]
-
[解決済み】最も近い文字列のマッチを取得する