2016-12-01 27 views
0

次のようにxのフィボナッチ数列があり、配列内の配列を検出したいとします。 Javaメソッドは、非常に単純なアプローチは、配列のコピーを作成し、二番目の配列の位置1に対する第一の配列の位置0を確認し、それらが一致する場合にすることであろう配列javaの整数配列のパターンの長さを見つける?

x   0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 
1)x mod 2 - 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 
2)x mod 3 - 0 1 1 2 0 2 2 1 0 1 1 2 0 2 2 1 

Answer 1) 3 (repetitive sequence 011 and length is 3) 
     2) 8 (repetitive sequence 01120221 and length is 8) 
+1

を使用すると、フィボナッチ数列のまたは任意のデータのための剰余値を含む配列のために特別にこれをしたいですか?フィボナッチシーケンスのモジュロ値の場合は、2番目の0に1が続くときにシーケンスが繰り返されます。 – samgak

+0

はい、フィボナッチシーケンス – vk1

答えて

1

の長さを返すべき終了までチェックを続けます。すべてが一致する場合、1の長さが繰り返されます。

最初の配列の位置0と2番目の配列の位置2を比較し、上記と同じ処理を行います。これが一致すると、2の長さが繰り返されます。

そして、一致するものが見つかるか、配列の最後に到達するまで、このプロセスを続行し、それ以上はオフセットできません。繰り返しはありません。

1

これはフィボナッチ数列の数値のモジュロ値に対してのみ使用し、任意のデータでは使用しない場合は、2番目に0が続いて1が続くとすぐにシーケンスが繰り返されますモジュロシーケンス。これは、mod(a + b、n)= mod(mod(a、n)+ mod(b、n)、n)であるため、フィボナッチシーケンス内の数値のモジュロ値)は、前の2つのモジュロ結果によって決定される。したがって、0の元のパターンに1が再発すると、パターンが繰り返されます。

+0

の場合、それが動作します。 – vk1

1

次のコードは動作します:

private static int detectSequence(int[] array) { 

    int count = 2; 
    for (int i = 2; i < array.length; i++) { 
     if(array[i] == 0 && array[i+1] == 1 && i+1 < array.length){ 
      return count; 
     } 
     count++; 
    } 
    return count; 

} 
関連する問題