2017-08-10 18 views
0

整数に関してPHPのカスタムアレイシャッフルを作りたい:私は、以下の機能を探し

function CustomShuffle($arr, $para){ 
............................ 
............................ 
return $array; 
} 

これは配列であると仮定します。以下のような出力に何かを探して

$array = array("red","green","blue","yellow","purple"); 

(異なる場合があります順序は同じですが、同じ整数パラメータで同じである必要があります)

$result = CustomShuffle($array, 10); 
// output: array("blue","purple","yellow","red","green") same 

$result = CustomShuffle($array, 12); 
// output: array("purple","yellow","red","green","blue") 

$result = CustomShuffle($array, 10); 
// output: array("blue","purple","yellow","red","green") same 


$result = CustomShuffle($array, 7); 
// output: array("blue","yellow","purple","red","green") 

単純に、配列はintegeに対してシャッフルされますrパラメータは同じですが、出力は同じパラメータで同じになります。出来ますか?

答えて

0

はい、これは必要な実装とどのように多くの順列あなたが許可するまで降りてくるんどのようにそれが起こる可能です。これを達成する非常に単純な方法は、array_push()同じ要素を要素をarray_shift()CustomShuffle$para回を実行ループを持つことです。この方法はcount($array)の可能な結果しか得られません。つまり、count($array)を法とする数値が同じ結果をもたらすことを意味します。

最適なアルゴリズムを使用するgmp_fact(count($array))、または入力配列の長さの単なる要因であろう最大の組み合わせを利用できるようになります。この値よりもユニークな組み合わせを実現する方法はありません。そのため、どのアルゴリズムを設計しても、最終的には既に組み合わせが発生するまで、常に$paraの値に制約があります。

+0

申し訳ありませんが、動作していません。 –

+0

何が問題なのですか?私は働くためのコードはここには含まず、参照のみを含んでいました。あなたのコードで何かが動作していない場合は、それを表現するために質問を編集する必要があります。 – yanman1234

+0

私はあなたの答えを理解して、すでに似たようなことを試みました。 http://www.englishact.com/Permutation/index.php?permutation=notwork#result:ここで私はうまく動作しない順列を試みました。これは私のサーバーが長い配列(1000+値)のために遅くなるでしょう。したがって、順列法を使用すると、これは私の問題を解決しません。実際に私はライブプロジェクトに適用できる効果的な方法が必要です。 –

関連する問題