2017-09-24 10 views
0
test = 0 
for i in range(n):   
    for j in range(n): 
     test = test + i * j 

*********これらのコードのBig O実行時間はどのくらいですか? B ***********

test = 0 
for i in range(n):   
    test = test + 1 

*********** C ***** Aについて****

for j in range(n): 
    test = test – 1   
i = n    
while i > 0: 
    k = 2 + 2 
    i = i // 2 

、私はそれがためにforループネストのO(N^2)であると考えて、Bのためにそれがループの単一であるため、O(N)です。とCのために、それはforループとwhileループなので、それはO(n * log(n))だと思います。私はこれを仮定して正しいですか?

+1

だろうが、なぜ 'C'が 'になり、右に最後の1までそれを持っていました2つの異なるループであるため、n * log(n) 'であり、forループはO(n)であり、whileループではそうではありませんO(n) – 0p3n5ourcE

答えて

2

あなたはループが入れ子になっていないので、それはO(n + log(n))だろうとn > log(n)ので、それは単に私も最初の2のために同意O(n)

+0

ありがとう!なぜlog(n)部分を省略するのですか?私はその周りに頭をラッピングするのに問題があります。 n> log(n)は –

+1

を証明します@Acoolguy関数の時間的複雑さに関心があるときは、非常に大量の入力に対してどのように動作するかが気になるものです。 nが大きくなるにつれて、 'n 'は' log(n) 'よりはるかに大きくなります(これはグラフで確認できます)。基本的に、 'O(log(n)) 'というループがあるという事実は、大きな入力の場合にはあまり意味がありません。 – Mitchel0022

+0

n = 500000000を取るとlog(n)は28に近くなります。以来、我々はnがより優位であり、log(n)がはるかに小さい値であることを示すので、nだけを考慮する。 – 0p3n5ourcE

関連する問題