0

10 桁の一意の数字が 100 万個あると仮定します。100 万個の数字のそれぞれに対して str_shuffle を実行すると、一意性は維持されますか???? 提案してください


いくつかの明確にしてくれてありがとう、しかし問題はまだ残っています.実際、私が話している百万の番号はすべて一意の番号です(実際、それらは10桁の携帯電話番号です).私はこれらの百万の番号をいくつかのクライアントに渡したいのですが、私はしませんそれらに実際の番号が必要です。したがって、各番号をランダム化し、同等の10桁の一意の番号を生成してクライアントに提供し、DBにマッピングを保持する必要があります。ほとんどのことを行わない合計アルゴリズムを探していますそうしないと、配列などの従来のパスをたどると、スクリプトが壊れてしまうと確信しています

4

7 に答える 7

6

いいえ。

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

str_shuffle('9876543210')「3124567890」なども表示される場合があります。

于 2010-11-22T16:03:11.307 に答える
3

答えがノーであることはかなり明白です。

他のすべての番号を気にしない単一の番号への変更は、重複する可能性があります。

ランダムシャッフルは、1つの数字の数字を混同するだけなので、重複する可能性が高いという変更です(確率を計算したい数学者はいますか?それについてのコメントを楽しみにしています)。

于 2010-11-22T16:07:28.823 に答える
1

反例:

<?php

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

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

私が得た:

011
011
于 2010-11-22T16:08:26.693 に答える
1

私の知る限り、 str_shuffle はデフォルトでは一意ではありません。文字列をランダムにシャッフルするだけです。理論的には、100 万個すべての数が同じになる可能性があります。

于 2010-11-22T16:03:53.020 に答える
1

問題のステートメントは、それらの要素の内容ではなく、配列要素を実際にシャッフルしたい場合があることを示唆しています。おそらく、一意性を維持することができますが、しばらくの間配列の要素を交換することにより、ランダムに分散されたセットを持つことができます。つまり、ランダムな要素 A をランダムな要素 B と N 回繰り返し交換します。

于 2010-11-22T16:51:12.837 に答える
1

あなたが探しているのは、たまたまあなたのために持っている順列スクリプトです。

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));

これにより、指定されたユーザー入力変数の可能なすべての順列が出力されます。

于 2010-12-31T06:03:56.200 に答える
0

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

10 桁の番号の 100 万セットを言うとき、それらすべてで使用したい場合str_shuffle、そして一意と言うときは、シャッフルする前に 10 桁の電話番号 100 万のうち少なくとも 1 つが存在しなかったことを意味します。または何?もしそうなら、ここを見てください:

10!3628800 です。これは 100 万をはるかに超えています。したがって、すべての数字がランダムになる可能性は 3 分の 2 です。

これは、str_shuffleすべての数値で使用すると、一意の定義に関係なく、「一意の」セットが得られる可能性が最も高い (66% 以上の確率) ことを意味します。

于 2012-09-29T07:38:53.833 に答える