問題は次のとおりです。d要素でサイズnのarr []を回転する関数rotate(ar []、d、n)を書く。 解決策(ジャグリング方法)はこちらhttp://www.geeksforgeeks.org/array-rotation/です。私を混乱させる理由は、サイクル数がnとdのgcdである理由です。誰かが例をもって証明を知っていますか?回転配列とサイクル数の混乱
1
A
答えて
1
サイクル数をnの最大公約数ている理由とD
サイクルの数は、完全に両方を分割されるように! 'c'が関係するサイクルの数である場合、nはcによって完全に割り切れるべきであり、すなわちn = x cであり、同様にd = ycである。
ここで、アルゴリズムでは、xは配列内で作られたセットの数であり、yは実行されたステップ(または反復)の数です。この例でこれを確認し、確認してください。
GCDを選択する主な目的は、xとyが整数であり、いくつかの浮動小数点数ではないことです。開発者がやろうどのような基本的
0
は
GCDは、(N、D)= 1プログラムが正常に動作しますTmp = arr[0]
for(i=0; i<n-1;i++){
arr[i*d % n] = arr[(i+1)*d % n]
}
arr[n-1] = arr[d-1]
、例えば(N、D)=(5,2)
Tmp = arr[0]
arr[0]= arr[2]
arr[2]= arr[4]
arr[4]= arr[1]
arr[1]= arr[3]
arr[3]= arr[5]
です
しかし、GCDは、(N、D)> 1、ここでNので/ GCD(6,2)= 3の問題、例えば(6,2)
Tmp = arr[0]
arr[0]= arr[2]
arr[2]= arr[4]
arr[4]= arr[0]
arr[0]= arr[2] // probleme because we are not able to go throw each element so we should break from the loop
を起動したとき、我々は最初の3つのみを変更することができます素子正確には、彼は最初の要素に戻ったときに中断し、開始要素を1だけインクリメントするので、次の反復ではarr [1]、arr [3]、arr [ 5]
関連する問題
- 1. ポインタと配列の混乱
- 2. のChar *配列の混乱
- 3. Typedef配列の混乱
- 4. Javascript配列ロギングの混乱
- 5. jquery配列の混乱
- 6. 2D arraylist配列の混乱
- 7. Perlのリファレンス混乱配列
- 8. ポインタの配列との混乱
- 9. ポインタとchar配列の混乱
- 10. 初回コーディングと混乱 - エコー
- 11. C++素数と動的配列の例の混乱
- 12. 配列と乱数
- 13. Javaの配列の宣言の混乱
- 14. Python/Numpy配列の次元の混乱
- 15. PHPでの配列参照の混乱
- 16. Postgresの配列比較混乱
- 17. PHPの配列出力混乱
- 18. HashTable多次元配列の混乱?
- 19. 2D配列の回転とvb.net内のポイントの回転
- 20. 弱い変数のリリースでのスウィフト配列の混乱
- 21. 構文混乱:配列のインデックス対関数呼び出し
- 22. foreachと多次元配列との混乱 - PHP
- 23. 乱数と配列検索
- 24. Ceph配置の混乱
- 25. C#での多次元配列の初期化との混乱
- 26. ポインタと配列のK&R Qsortの混乱
- 27. 回転numpy 2D配列
- 28. 混乱行列R
- 29. do whileループと変数との混乱
- 30. フォークとグローバル変数との混乱
ここにコードの例がありますが、そこには特に理解できないことがありますか? –