web-dev-qa-db-ja.com

O(N)平均

可能性のある複製:
Big O表記とは何ですか?使用しますか?

こんにちは、みんな、

かなり基本的なスケーラビリティ表記の質問。

私は最近、私のpython ordered-list implimentation "という投稿に対してコメントを受け取りましたが、あなたの 'ordered set'実装はO(N)挿入のために注意してください」

これは知っておくと素晴らしいことですが、これが何を意味するのかわかりません。

n(o) o(N)、N(o-1)またはN(o * o)などの表記を見てきました

上記の表記は何を指しますか?

40
Fire Crow

コメントは Big-O 表記を参照していました。

簡単に:

  1. O(1)は一定の時間-アイテムの数に依存しないことを意味します。
  2. O(N)は、アイテムの数に比例することを意味します。
  3. O(log N) means a time proportional to log(N)

基本的に「O」表記は、操作に最大k * f(N)まで時間がかかることを意味します
どこ:

kは定数乗数です

f()はNに依存する関数です

52
quamrana

Big O Notationと呼ばれます: http://en.wikipedia.org/wiki/Big_O_notation

したがって、挿入がO(n)であるということは、挿入を実行するためにリスト全体(またはその半分-大きなO表記法は定数因子を無視する)を歩く必要があることを意味します。

これは素敵な紹介のように見えます: http://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/

23
dreeves

O(n)は Big O Notation であり、特定のアルゴリズムの複雑さを指します。 nは入力のサイズを指します。この場合、リスト内のアイテムの数です。

O(n)は、アルゴリズムがアイテムを挿入するためにn個の操作の順序を取ることを意味します。例えばリストを1回ループします(または2回などの一定回数、または半分だけループします)。

O(1)は一定の時間がかかることを意味し、リストにあるアイテムの数に依存しません。

O(n ^ 2)は、すべての挿入に対して、n * n回の操作を行うことを意味します。つまり、1つのアイテムに対して1つの操作、2つのアイテムに対して4つの操作、3つのアイテムに対して9つの操作。ご覧のとおり、O(n ^ 2)アルゴリズムは、大量のアイテムを処理するには非効率になります。

リストの場合O(n)は挿入には悪くありませんが、最速ではありません。また、O(n/2)は同じものと見なされますas O(n)]は両方ともnと同じ速度で成長するためです。

14
Colin Gislason

特にO(n)は、リストに2倍のアイテムがある場合、No more than 2倍の長さ、50倍の時間がかかる場合No more than 50倍の長さ。詳細については、ウィキペディアの記事を参照してください。

編集(上記の太字):Big-Oは上限を表すため、リストに2倍の要素がある場合、挿入にはmost2倍の長さで、50倍の要素がある場合、mostの50倍の時間がかかります。

さらにΩ(n)(nのBig Omega)である場合、2倍のリストの場合、leastの2倍の長さが必要です。実装がO(n)とΩ(n)の両方である場合、両方でleastmostで2倍の長さのリストの場合、Θ(n)(nのビッグシータ)と言えるつまり、要素が2倍あると、正確に2倍の時間がかかります。

ウィキペディア(および個人的な経験、それ自体が有罪であること)によると、Big-Oは、Big-Thetaが意味するところによく使用されます。技術的には、関数O(n ^ n ^ n ^ n)を呼び出すことは正しいでしょう。なぜなら、Big-Oは、関数はそれより遅くはないということですが、実際には、技術的に正確であるにもかかわらず、あまり有用で誤解を招く情報ではありません。

11
Davy8

プログラムの複雑さ、つまり実際に問題を解決するために必要な操作の数を指します。 O(n)は、各操作がリスト内のアイテムと同じ数のステップを実行することを意味します。これは挿入に非常に時間がかかります。同様に、O(n ^ 2)がある場合はすべての操作は達成するために「n」平方のステップ数を必要とする、など...「O」は大きさの順序であり、括弧内の式は常にプロシージャで操作されるアイテムの数に関連しています。

5
Michael

簡単な答え:処理時間が入力のサイズと線形関係にあることを意味します。たとえば、入力のサイズ(リストの長さ)が3倍の場合、処理時間は(おおよそ)3倍になります。そして、それが千倍に増加すると、処理時間も同じ大きさで増加します。

長い答え:Ian Pとdreevesが提供するリンクを参照してください

4
Kimvais

これは役立つかもしれません:

http://en.wikipedia.org/wiki/Big_O_notation#Orders_of_common_functions

O(n):ソートされていないリストまたは不正な形式のツリー内のアイテムを検索します(最悪の場合)。 2桁のn桁の数字を追加する

幸運を!

3
Ian P

ウィキペディアの説明 それは私よりもはるかに優れていますが、リストサイズがNの場合、アイテムの挿入には最大Nループ/反復が必要です。 (実際には、リスト全体を反復処理する必要があります)

よりよく理解したい場合は、無料の本があります Berkeleyから 表記法についてより深く掘り下げます。

2
Yacoby