2

特定の組み合わせサブセット内のすべての数値を均等に表現するための最も効果的な PHP スクリプトは何かを調べたいと思います。

宝くじ問題の例:

  • 6つの数字からなる組み合わせを10個作る
  • 数のセットから(1,2,3,4,5,6,7,8,9,10,11,12)

12 個の数字から 6 個の数字からなる924個の組み合わせを作成できることを知っています。

924 ラインをプレイする余裕がないので、選択したすべての番号を均等に表す 10 ラインのみを選択したいと考えています。

したがって、この例では次のようになります。

  • 1-2-3-4-5-6
  • 7-8-9-10-11-12

    さらに8行

次のような組み合わせを避けようとしています。

  • 1-2-3-4-5-6
  • 1-2-3-4-5-7
  • 1-2-3-4-5-8

...など、ほとんど同じです。各数値を均等に表現したい。

それが理にかなっていることを願っています。

4

2 に答える 2

1

使用したい数字の「プール」を作成し、そのプールからランダムに引き出すことができます。たとえば、それぞれ 6 つの数字の組み合わせが 10 個必要な場合、合計で 60 個の数字になります。ただし、1 ~ 12 のそれぞれを均等に表現する必要があるため、各数値は 5 になります。したがって、1 ~ 12 の各 5 個を含む配列から始めて、6 個のセットごとに配列からランダムに描画します。

$pool = array();
for($i = 0; $i < 5; $i++)
    for($x = 1; $x <= 12; $x++)
        $pool[] = $x;

$result = array();
for($i = 0; $i < 10; $i++) {
    $set = array();
    for($x = 0; $x < 6; $x++) {
        $key = array_rand($pool);
        $set[] = $pool[$key];
        unset($pool[$key]);
    }
    $result[] = $set;
}

// $result now contains 10 sets of 6 numbers each

デモ: http://ideone.com/NpO3h4

于 2013-01-23T15:46:23.283 に答える
0
// 1 から始まるセット内の数字の数
$番号 = 12;
$set = 配列();
for ($i=1;$i>=$numbers;$i++)
{
    array_push($set, $i);
}

// サブセット内の数値の数
$カウント = 6;
$subSet = 配列();
while ($count > 0)
{
    // セット内の 1 から数値までの乱数を取得します
    $rand=rand(0,$numbers-1);
    array_push($subSet, $set[$rand]);
    $count--;
}

// $subSet には、1 から 12 までの 6 つの乱数の組み合わせが含まれています
// 更新し続ける
var_dump($subSet);

ほら、説明付きで、これはあなたが望んでいたものですか?

編集:「最も効果的な方法」と言ったことに気づきました。これは (使用されるメモリの点で) 最も効果的な方法ではありませんが、それに近い方法です。

于 2013-01-23T15:54:29.057 に答える