2010-11-22 14 views
1

私は100万の10桁の固有の数字を持っていると仮定します。 100万の数値のそれぞれに対してstr_shuffleを実行すると、一意性はまだ維持されますか?いくつか明確にするためPHP固有の10桁の数字str_shuffle


みんなありがとうを提案するが、問題はまだremains.Actually、私が話している百万号は、すべてのユニーク番号(Infactは、彼らは携帯電話番号10桁の数字)がこれらを与えたい.Iですしてください何人かのクライアントには何百万人もの人はいませんが、私はそれらに実際の番号を持たせたくありません。したがって、私はそれぞれの番号をランダム化し、クライアントに与えることができる同等の10桁の固有番号を生成する必要があります。スクリプトの処理をあまり行わないsum algoの場合は、配列と代用物の伝統的なパスに従えばスクリプトが壊れてしまうと確信しています。

答えて

7

No.

str_shuffle('1234567890')が「3124567890」と表示される場合があります。

str_shuffle('')はまた、あなたが「3124567890」、などなど

2

str_shuffleは、私の知る限り、デフォルトではユニークではありません与えるかもしれません。文字列をランダムにシャッフルします。理論的には、すべての100万の数字が同じになる可能性があります。

+0

これは問題ではありません。 –

+0

あなたはそれが十分ではないことを意味する..?それは私が思う、つまり「いいえ」という質問に答えるものです。 –

4

答えが「いいえ」であることは明らかです。

他のすべての数字を気にしない単一の数字を変更すると、重複が発生する可能性があります。

乱数シャッフルは、数字を1つの数字に混ぜるような変更ですので、確率を計算したいと思っている数学者がいる可能性はありますか? )

2

カウンター例:

<?php 

$unique_numbers = array('101', '110'); 

foreach($unique_numbers as $number){ 
    echo str_shuffle($number) . PHP_EOL; 
} 

私が得た:

011 
011 
2

問題の文は、あなたが実際には配列エルをシャッフルすることを望むかもしれない示唆それらの要素の内容ではない。多分、あなたは一意性を維持することができますが、しばらくの間、配列の要素を交換することによって、ランダムに分散したセットを持つことができます。つまり、N反復の場合、ランダム要素Bをランダム要素Bに置き換えます。

2

あなたが探しているものは、私があなたのために持っていたパーミュテーションスクリプトです。

function permuteString($str) 
{ 
    $aStr = str_split($str); 
    $iSize = count($aStr); 
    $aResult = array(); 

    for ($i = 0; $i < $iSize; ++$i) 
    { 
     $sFirst = array_shift($aStr); 
     $aInner = $aStr; 
     $iInner = count($aInner); 
     for ($j = 0; $j < $iInner; ++$j) 
     { 
      $aResult[] = $sFirst . implode('', $aInner); 
      $sTmp = array_shift($aInner); 
      $aInner[] = $sTmp; 
     } 
     $aStr[] = $sFirst; 
    } 
    return $aResult; 
} 

$userinput="1234567890"; 
print_r(permuteString($userinput)); 

これは、指定されたuserinput変数のすべての可能な並べ替えを出力します。

1

「一意性」とは何を定義するかによって異なります。

10桁の数字が100万件の場合、str_shuffleをすべて使用する場合は、一意であると言いますと、10桁の10桁の電話番号のうち少なくとも1つシャッフルする前に何か存在するのか?その場合は、こちらをご覧ください:

10! 3628800です。これは、100万を超えるものです。したがって、すべての数字がランダムになる確率は2/3となります。

これは、すべての数字にstr_shuffleを使用すると、あなたがユニークであると定義しているにもかかわらず、(ユニークな)セットを得る可能性が高いことになります。

+0

私は66%以上のチャンスを呼ぶことはないでしょう。少なくとも、彼らが一意であることが重要であれば、少なくとも66%の確率を信頼しません。 –

関連する問題