2016-11-04 1 views
1

それでは、私はこのように見えたプログラムを持っていたとしましょう:同じスコープ内の複数のforループは、プログラムの大きなO表記にどのように影響しますか?

var foo = 10; 

for(var i = 0; i < foo; i++){ 
    console.log('first loop'); 
} 

for(var j = 0 j < foo; j++){ 
    console.log('second loop'); 
} 

、私は一般的にはランダウの記号について理解するものから、我々はプログラムの効率を(それが実行にかかる別名どのくらい)を測定N個の入力のサイズに基づいている。したがって、 'j'ループが 'i'ループ内にネストされていると、これはn^2になりますが、両方のループが同じスコープにあるため、ランタイムは依然としてO(N)になります。この評価は正しいですか?

答えて

0

両方のループにここで行わ基本的な動作は

  • ループ1、反復1
  • ループ1、反復2 です.......
  • ループ1、反復10
  • ループ2、反復1 .......
  • ループ2、反復10

N回の書き込み操作があります。

ので、合計時間の複雑さになりO(N)+ O(N)が、定数が複雑に無視されているためであるO(N)彼はループがないことを述べるために「スコープ」を意味

0

はい、それはちょうどビッグOのために、「それが実行にかかる時間」というフレーズが100%正確ではないことを指摘し

正しい

は、ときに、関数の制限動作について説明します引数は特定の値または無限に向かう傾向があります。 https://en.wikipedia.org/wiki/Big_O_notation

O(N) + O(N) = O(N) 
O(N) + O(M) = O(max(N,M)) 
0

つのループが全くお互いに相互作用しないので、これはまだO(N)、を検索するリニアだろう。

技術的にはアレイアクセスは定数O(1)であり、時間的に直線的な検索です。

Oの表記法は基本的にアルゴリズムの複雑さを測定するためのもので、スコープはここでは重要ではありません。はい、あなたの仮定が正しい

+0

入れ子になっているが独立している – arhak

関連する問題