2016-11-18 13 views
-2

私のコンピュータ科学の教授は、今日の大きなO表記について教え始めました。ここで彼は私たちを与えた例は以下のとおりです。JavaコードのBig-Oを決定する

  1. 次の大きなOとは何ですか。 4n2 + 2は、O(n^2)?

    b。 n2 + 14n + 6は、O(n^2)?

    c。 5n3 + 10n2-n-8は、O(n^3)?

    d。 3n2 + 2nは、O(n^2)?

私はそれはプログラムが入力し、どのくらいそれが変化するその入力に応じて増加するであろうに基づいて実行するのにかかる時間の長さに関係していることを理解しています。私は、上記の問題の大きな問題を特定し、私が思ったものを入れておく方法を探しました。しかし、それはJavaコードの大きなOを決定することになると、私は失われています。誰かが私にこれらの問題の正しい方向を教えてもらえますか?

3. int count = 0; 
for (int i = 1; i <= n; i++) { 
i = n; 
count += 1; 
} 
// end for 

4. int total = 0; 
for (int i = 1; i <= n; i++) { 
for (int j = 1; j < i; j++) { 
    for (int k = 1; three < j; j++) { 
total += 1; 
} //end for } // end for } // end for 

5. int total = 0; 
for (int one = 1; one <= n; one++) { 
    for (int two = 1; two < n; two++) { 
    for (int three = 1; three < 10; three++) { 
total += 1; 
} //end for } // end for } // end for 

6. int total = 0; 
for (int pass = 1; pass <= n; pass*=2) { 
total += 1; 
} 
// end for 

7. p = n; 
while (n>1) { 
n = n/2; 
    while (p>0) { 
    p = p - 1; 
} 
// end while } // end while 

8. for (int i = 1; i <= n; i+=2) { 
j=1; 
while(j < n) { 
j = j + 2; 
x = x + 2; 
} // end while } // end for 
+6

https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/ –

答えて

0

簡単に言えば、あなたは離れて、定数を投げ、あなたのコードはNに応じて、どのように多くの操作回数や大きさの最高Nの機能のみを維持する必要があります。だからあなたの場合、最高次数の多項式。

など。このコード:本当に:

for (int i = 0; i < n; ++i){ 
    System.out.println(i*2); 
} 

B = 1(警告N反復と反復ごと操作、プラス初期i = 0、合計+ B操作ようのn * aを有しています、 下記参照)。

ランタイムに興味がある場合は、個々の操作の時間でこれを複数倍にすることができますが、正確な数値は知られておらず、キャッシュメモリなど多くのものの影響を受ける可能性があります。別の定数。

しかし、とBは、実際に決定するのは難しいです。 ++iが1つの操作であり、i*2が別のものであり、printlnの3番目の操作であるとします。しかしそれは正しいですか?どのくらいの操作printlnは何ですか? 1つのシンボルで記述する操作のいくつかが実際の操作につながる場合はどうなりますか?

は幸いなことに、これらの定数は、ランダウの記号のために重要ではありません。

  • フォーム*のF(n)はのすべての機能は同じクラスに属しています。
  • 機能S(n)はをf(n)と(n)のG

今何をかどうかを決定する段階最高クラスに属する(N)*のF +のb * gを(N)= f(n)はg(n)よりも高次ですか?簡単に言えば、それはF(n)はは、あなたが高速なコンピュータとg(上F(n)はを実行した場合でも、常に(N)グラムより大きないくつかNから始まることを意味しn)遅いもので。

たとえば、最初のアルゴリズムがn^2操作であり、2番目が10 * n操作であるとします。 n> 10から開始すると、第1のアルゴリズムはより遅くなる(各動作は同じ時間、例えば= 1となる)。だから、あなたはn^2アルゴリズムを実行するためにコンピュータを100倍高速化します。今ははるかに高速です:n^2/100時間で!しかし、n> 1000から開始して、n - アルゴリズムよりも遅くなります。コンピュータの速度にかかわらず、n^2アルゴリズムは十分に大きい場合は常に遅くなりますn。これは、実行されている実際のマシンに関係なく、アルゴリズム自体のプロパティであり、これが重要な理由です。

関連する問題