タグ付けされた質問 「big-o」

Big-O表記は、漸近的な上限を表すために使用されます。アルゴリズムの関連する時間または空間の複雑さについて説明します。Big-O分析は、問題の難易度の大まかな簡略化された見積もりを提供します。

17
業界で働くとき、big-Oは本当に関連性がありますか?
私が行ったすべてのインタビューで、big-O表記を含む複雑さの数学的分析についてクイズを受けました。 big-O分析は、業界の開発にどの程度関連していますか?どのくらいの頻度でそれを実際に使用しますか?また、問題に対する研ぎ澄まされた考え方を持つことはどのくらい必要ですか?

11
無限リストから最高の100個を取得
私の友人の一人がこのインタビューの質問を受けました- 「ある一定の時点で上位100個の数字を返すようにデータ構造を維持する必要がある数字の無限リストからの数字の流れが絶え間なくあります。すべての数字は整数のみであると仮定します。」 これは簡単です。ソートされたリストを降順で保持し、そのリスト内の最小数を追跡する必要があります。取得した新しい数がその最小数よりも大きい場合、その最小数を削除し、必要に応じてソート済みリストに新しい数を挿入する必要があります。 その後、質問が延長されました- 「挿入の順序がO(1)であることを確認できますか?可能ですか?」 私が知っている限りでは、リストに新しい番号を追加し、並べ替えアルゴリズムを使用して再度並べ替えても、クイックソートのO(logn)が最適です(私は思う)。だから私の友人はそれは不可能だと言った。しかし、彼は納得しておらず、リストではなく他のデータ構造を維持するよう求めました。 私はバランスの取れた二分木を考えましたが、そこでも1の順序で挿入されません。だから私も同じ質問をしています。上記の問題に対して1の順序で挿入できるデータ構造があるか、まったく不可能であるかを知りたい。
53 numbers  big-o  puzzles 

7
この関数の最悪の場合はなぜO(n ^ 2)ですか?
私は、任意の関数のBigO表記を計算する方法を自分自身に教えようとしています。この機能は教科書で見つけました。この本は、関数がO(n 2)であると断言しています。これがなぜなのかを説明していますが、私はそれに従うのに苦労しています。これがなぜそうなのか、誰かが数学を教えてくれるのではないかと思います。基本的に、O(n 3)より小さいことを理解していますが、O(n 2)に単独で着陸することはできませんでした A、B、Cの3つの数字のシーケンスが与えられたと仮定します。個々のシーケンスには重複した値が含まれていないが、2つまたは3つのシーケンスにある数字があると仮定します。3方向の集合のばらばらの問題は、3つのシーケンスの共通部分が空かどうか、つまり、x∈A、x∈B、x∈Cのような要素xがないかどうかを判断することです。 ちなみに、これは私にとって宿題の問題ではありません-その船は何年も前に航海しました:)、私はもっと賢くしようとしています。 def disjoint(A, B, C): """Return True if there is no element common to all three lists.""" for a in A: for b in B: if a == b: # only check C if we found match from A and B for c in C: …
44 python  big-o 

20
以下のクラスで非常に優れた実世界のアルゴリズムが存在しますか?[閉まっている]
昨夜、私は別のプログラマーと話し合っていましたが、何かがO(1)であっても、O(1)アルゴリズムに大きな定数がある場合、O(n)の操作はそれを上回る可能性があります。彼は同意しなかったので、ここに持ってきました。 その下のクラスのアルゴリズムを大幅に上回るアルゴリズムの例はありますか?たとえば、O(n)がO(1)より速いか、O(n 2)がO(n)より速いです。 数学的には、定数因子を無視すると、漸近的上限を持つ関数でこれを実証できますが、そのようなアルゴリズムは野生に存在しますか?そして、それらの例はどこにありますか?どのような状況に使用されますか?
39 algorithms  big-o 

4
P対NP対NP完全対NPハードを理解しよう
私はこれらの分類とそれらが存在する理由を理解しようとしています。私の理解は正しいですか?そうでない場合、何ですか? Pは多項式の複雑さ、またはなどの非負の実数の場合です。問題がPに属する場合、多項式時間でゼロから解決できるアルゴリズムが少なくとも1つ存在します。たとえば、分割する場合、各ステップでループしてチェックすることにより、整数が素数であるかどうかを常に把握できます。O(nk)kO(1), O(n1/2), O(n2), O(n3)n2 <= k <= sqrt(n)kn NPは非決定的な多項式の複雑さです。非決定論的であることの意味を私は本当に知りません。多項式時間で検証するのは簡単ですが、答えがわからない場合はゼロから解決する多項式時間である場合とそうでない場合があります。それは以来かもしれ多項式時間で解けること、すべてのP上の問題もNPの問題です。NPの例として整数因数分解が引用されていますが、試行的因数分解にはO(sqrt(n))時間がかかるため、個人的にはなぜPでないのか理解できません。 NP-Complete私はまったく理解していませんが、この例として巡回セールスマン問題が引用されています。しかし、私の意見では、TSPの問題は単にNPである可能性があります。なぜなら、前もってパスが与えられているかどうかを確認するようなものが必要だからです。O(2n n2) time to solve, but O(n) NP-Hardは未知のものでいっぱいだと思います。検証が難しく、解決が難しい。

2
O(…)とは何ですか。どのように計算しますか?
助けて!アルゴリズムまたはコードのBig-Oを分析する必要がある場所について質問があります。 Big-Oが何であるか、またはBig-OtaとBig-Thetaまたはアルゴリズムの複雑さを分析するその他の手段にどのように関連するかは正確にはわかりません。 Big-Oがコードを実行する時間を指すのか、それとも必要なメモリ量(スペース/時間のトレードオフ)を指すのかわかりません。 私はコンピューターサイエンスの宿題を持っています。そこでは、いくつかのループ(おそらく再帰アルゴリズム)を使用し、そのためのBig-Oを考え出す必要があります。 私は、既知のBig-Oを持つ2つのデータ構造またはアルゴリズムから選択できるプログラムに取り組んでおり、どちらを選択するかわからない。 Big-Oを計算してプログラム、宿題、またはコンピューターサイエンスの一般的な知識に適用する方法を理解するにはどうすればよいですか? 注:この質問は、コミュニティによって決定された他のBig-O質問の標準的なターゲットです。多くのBig-Oの質問に役立つ情報を大量に含めることができるのは、意図的に広いことです。これが広いという事実を、同様の質問が受け入れられることを示すものとして使用しないでください。

5
これは、アルゴリズムの「Big O」表記を識別するための適切な「ルール」ですか?
Big O Notationと、アルゴリズムの記述方法に基づいてBig O Notationを計算する方法についてもっと学びました。アルゴリズムのビッグO表記を計算するための興味深い「ルール」セットに出会い、正しい軌道に乗っているかどうかを確認したいと思いました。 ビッグO表記:N function(n) { For(var a = 0; i <= n; i++) { // It's N because it's just a single loop // Do stuff } } ビッグO表記:N 2 function(n, b) { For(var a = 0; a <= n; a++) { For(var c = 0; i …
29 algorithms  big-o 

5
なぜmergesort O(log n)なのですか?
Mergesortは分割統治アルゴリズムであり、入力が繰り返し半分になるためO(log n)です。しかし、入力がループごとに半分になったとしても、各半分の配列でスワッピングを行うために各入力項目を反復処理する必要があるため、O(n)であってはなりませんか?これは、本質的に漸近的にはO(n)です。可能であれば、例を提供し、操作を正しくカウントする方法を説明してください!まだ何もコーディングしていませんが、オンラインでアルゴリズムを調べています。また、ウィキペディアがmergesortの動作を視覚的に示すために使用しているもののgifを添付しました。
27 algorithms  big-o 

5
アルゴリズムがO(log n)であるかどうかの判別
CS理論を更新し、アルゴリズムO(log n)の複雑さを識別する方法を知りたいです。具体的には、それを識別する簡単な方法はありますか? 私はO(n)を知っています、あなたは通常単一のループを持っています。O(n ^ 2)は二重ループです。O(n ^ 3)はトリプルループなどです。O(log n)はどうですか。

2
最小数の比較で2つのソートされた配列をマージするアルゴリズム
サイズnおよびmのタイプTの 2つのソートされた配列a、bが与えられます。2つの配列を(最大サイズn + mの)新しい配列にマージするアルゴリズムを探しています。 安価な比較操作がある場合、これは非常に簡単です。1つまたは両方の配列が完全に走査されるまで、最初の要素が最も低い配列から取り出し、残りの要素を追加します。このようなもの/programming/5958169/how-to-merge-two-sorted-arrays-into-a-sorted-array ただし、2つの要素を比較すると、ソース配列からターゲット配列に要素をコピーするよりもはるかに高価な場合、状況は変わります。たとえば、大きな任意精度の整数または文字列の配列があり、比較が非常に高価になる場合があります。配列の作成と要素のコピーは無料で、コストがかかるのは要素を比較することだけだと考えてください。 この場合、要素比較の最小数で 2つの配列をマージします。以下に、単純なマージアルゴリズムよりもはるかに優れた機能を発揮できるいくつかの例を示します。 a = [1,2,3,4, ... 1000] b = [1001,1002,1003,1004, ... 2000] または a = [1,2,3,4, ... 1000] b = [0,100,200, ... 1000] 次のように、単純なマージアルゴリズムが最適になる場合があります。 a = [1,3,5,7,9,....,999] b = [2,4,6,8,10,....,1000] したがって、アルゴリズムは、配列がインターリーブされている場合、または少なくとも大幅に悪化していない場合に、理想的には正常に低下し、最大n + m-1回の比較を実行する必要があります。 サイズの違いが大きいリストに対しては、バイナリ検索を使用して、小さな配列の要素を大きな配列に挿入することで、かなりうまくいくはずです。しかし、両方のリストが同じサイズでインターリーブされている場合、それは適切に低下しません。 要素で利用できるのは(合計)順序関数のみであるため、比較を安価にするスキームは不可能です。 何か案は? 私はScalaでこのビットを思いつきました。比較の数に関しては最適であると思いますが、それを証明する能力を超えています。少なくとも、私が文献で見つけたものよりもずっと簡単です。 そして、最初の投稿以来、これがどのように機能するかについてのブログ投稿を書きました。

7
Big OのOとは何ですか?
Big O表記のBigとOとは何ですか?私は定義を読みましたが、Oが「oh」と発音されていることはわかりません。たとえば、O(n)は線形アルゴリズムの複雑さであり、nは操作の数になる可能性があることを理解しています。しかし、Oとは何ですか?
23 complexity  big-o 


5
アルゴリズム:O(n)とO(nlog(n))を合計するにはどうすればよいですか?
重複を見つけて削除する次のアルゴリズムがあります: public static int numDuplicatesB(int[] arr) { Sort.mergesort(arr); int numDups = 0; for (int i = 1; i < arr.length; i++) { if (arr[i] == arr[i - 1]) { numDups++; } } return numDups; } これの最悪の場合の時間の複雑さを見つけようとしています。私はマージソートが知っているnlog(n)し、私のforループではデータセット全体を反復処理しているので、それはとしてカウントされnます。しかし、これらの数値をどうするかはわかりません。合計するだけですか?もしそうするなら、どうすればいいですか?

2
Big Thetaの代わりにBig Oが教えられるのはなぜですか?
Big O表記は関数の上限を提供しますが、Big Thetaは厳密な制限を提供します。しかし、Big O表記法は、通常、Big Thetaを本当に意味する場合に、一般的に(そして非公式に)教えられ、使用されることがわかります。 たとえば、「Quicksort is O(N ^ 2)」は、「Quicksort isΘ(N ^ 2)」という非常に強力なステートメントに変換できます。 Big Oの使用は技術的には正しいですが、Big Thetaのより一般的な使用はより表現力があり、混乱が少なくなりませんか?このBig Oがより一般的に使用される歴史的な理由はありますか? ウィキペディアのメモ: 非公式に、特にコンピュータサイエンスでは、Big O表記法は、Big ThetaΘ表記法を使用することが特定のコンテキストでより実際に適切である場合に、漸近的タイトバインドを記述するためにしばしば乱用されることがあります。

6
関数のBig O実行時間を変更するときに何と呼びますか[クローズ]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 去年閉鎖されました。 O(n^2)時間内にデータベースをソートする関数があるとしましょう。私はそれをリファクタリングしてO(n log(n))時間内に実行したいので、戻り値と入力を同等に保ちながら、操作の基本的な方法を変更します。 このリファクタリングアクティビティを何と呼びますか? 「高速化」は、アルゴリズムを実行する際の大きなO速度を変更せずにアルゴリズムを高速化できるため、あまり適切ではないようです。 「単純化」も正しくないようです。 このアクティビティを何と呼びますか? 更新 私が見つけた最良の答えは、漸近的な時間の複雑さを減らすことです。
19 complexity  big-o 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.