2016-11-30 12 views
1

私はこの質問に苦労しています。だから私は例を使って説明します。ネストされたfor-loopsでは、j = i + 1 vs j = 1?

私は以下の配列を持っていると言ってください:A = {5,8,1,3,2,6}はサイズn = 6でA [0 ... 5]でインデックスされています。

そして、左から右への走査で、各値とそれに隣接する値とを比較するための何らかのスキャンを実行したいと思います。ネストされたforループを実行する次の2つのコードスニペットの違いは何ですか?

// snippet 1, using i to take the first and j to take whatever is next to i. 
for i <- 0 to n-2 do 
    for j <- i+1 to n-1 do 
     // do the scanning, comparing, etc.... 


//snippet 2 using i to take the first and j to take the second. 
for i <- 0 to n-2 do 
     for j <- 1 to n-1 do 
      // do the scanning, comparing, etc.... 

私はそれらがまったく同じで、私がやったペン/ペーパーテストで何の違いも見つけられないと思います。 1つはありますか?

+2

(A[0], A[0])(A[n - 1], A[n - 1])を除く '(I + 1)...(N-1)' '1とは異なる値を生成すべきであるとして(A[i], A[i])扱わスニペット.. (n-1) 'となる。 –

+0

@ cricket_007詳しく教えてください。どうやって? – Callat

+1

最初のループで 'i == j'のときはインスタンスが決してありません –

答えて

2

さて、(最も外側のループの)n = 3

// snippet 1, using i to take the first and j to take whatever is next to i. 
for i <- 0 to n-2 do 
    for j <- i+1 to n-1 do 
     // do the scanning, comparing, etc.... 

最初の繰り返し実行してみましょう:

i = 0j = 1

i = 0j = 2

2回目の反復:

i = 1およびj = 2

完了!

//snippet 2 using i to take the first and j to take the second. 
for i <- 0 to n-2 do 
     for j <- 1 to n-1 do 
      // do the scanning, comparing, etc.... 

最初の反復:

i = 0j = 1

i = 0j = 2

2回目の反復:

i = 1j = 1

i = 1j = 2

スニペット2の2番目の繰り返しの違いに注目してください。

+0

うわー!私はそれを逃したとは信じられません。 'j <-1 'とする。 jは、ループiが余分な計算や比較などを追加するたびに1から始まりますが、 'j < - i + 1'で始まります。私は左から右に行くように、私は私が前に開始しないことを保証することができます!どうもありがとうございます !!!! – Callat

+1

@ KazRodgers正直、これは助けてうれしいです。驚いたことに、 – mascoj

+0

。私は2つの関連するアルゴリズムを見ていて、jの値がそれらを分ける唯一のものです。私はそれを一日半見ていて、違いを理解できませんでした。 – Callat

3

jは、iの次の値からカウントを開始します。

例:i = 1, j = 2 | i = 2, j = 3など

2番目の値は、iの値に関係なく1から数えます。つまり、変数iは変数jには影響しません。

どちらも使用できますが、それらを使用して配列要素をどのように使用するかによって異なります。

+0

これは最初のものと同じですので、jからiへの依存関係を構築しますが、2番目のものはそれ自身の関数で可能です。 – Callat

+0

ええかなりかわいいです。 – SenselessCoder

1

両方とも、配列要素のペアを構築します。異なるペアを定義する2つの異なる考え方があります。

1)ペアには異なる要素が含まれている場合にのみ固有です。 (A[i], A[j]) == (A[j], A[i])

2)要素の順序が異なる場合、ペアは一意です。 (A[i], A[j]) <> (A[j], A[i])

さらに、2つはまた、ペア(i == j)、

関連する問題