1

私が直面している問題は、以下の例のような問題がある場合の方法です。

コード 1000、2000、3000、4000、5000

ID 1、2、3

========================================

これ:

ID 番号 1 のコードは 1000、2000、3000、4000 です

ID 番号 2 のコードは 2000、4000、3000 です

ID 番号 3 のコードは 3000、4000、5000 です

========================================

すべてのフィールドが接続されると、各 ID は同じコードを見つけました。上記の例から、公平な結果を生成し、以下のように各 ID で以前のコードに調整したいと考えています: (ID のセットに対して公正なコードを生成する)

========================================

することが:

ID 番号 1 にはコード 1000、2000 があります (1000 は番号 1 にある必要があります。これは、他のコードよりも優れているためです)

ID 番号 2 のコードは 3000、4000 です

ID 番号 3 にはコード 5000 があります (5000 は番号 3 にある必要があります。これは、他よりも持っているためです)

========================================

ラウンドロビンを使っていると言う人もいますが、私はラウンドロビンを聞いたことがなく、使い方がわからず、頭が真っ白です。PHPを使用するような別の簡単な方法はありますか? 道に迷いました。

ありがとう。

================================================== ===========

説明:

各ユーザーが事前定義されたコードを持ち、同じコードを持たないアプリケーションを作成しています。たとえば、ユーザー A のコード範囲は 1000 ~ 1500 で、ユーザー B のコード範囲は 1600 ~ 2000 です。ユーザー C のコード範囲は 1300 ~ 1550 です。ご覧のとおり、A のコードに含まれる C のコードの距離 (A -> 1000-1500、C -> 1300-1550) は、2 人のユーザー間で確実に重複します。この条件で、より公平にするためにどのように分離して分割するか。C が 1300、A が 1301、C が 1302 などを 1500 までとします。

前に示した簡単な例で十分に理解できると思いましたが、ごちゃごちゃしているように見えました。私のミスです。

4

1 に答える 1

3
$codes = array(1000, 2000, 3000, 4000, 5000);

// set up the receiving "containers"
$ids = array(
  array(),
  array(),
  array(),
);

$n_ids = count($ids);
$i = 0;

foreach ($codes as $code) {
    // use ($i % $n_ids) to distribute over $n_ids containers
    $ids[$i % $n_ids][] = $code;
    ++$i;
}

print_r($ids);

出力:

Array
(
    [0] => Array
        (
            [0] => 1000
            [1] => 4000
        )

    [1] => Array
        (
            [0] => 2000
            [1] => 5000
        )

    [2] => Array
        (
            [0] => 3000
        )

)

この問題は単純な配布タスクです。M個のコンテナーにN個のアイテムを配布します。

i(0 <= i< )ごとNに、アイテムを入れるコンテナを選択しますN[i]。選択は、次の式を使用して行われます:(i mod MモジュロiM

この式は、次のようにラウンドするため、ラウンドロビンと呼ぶことができます。

i    :  0  1  2  3  4
i % M:  0  1  2  0  1

さらに速く

関数もこのarray_chunkタスクを実行しますが、最初に問題を理解したいと思いました。また、array_chunk多少異なる結果が得られます。

$ids = array_chunk(array(1000, 2000, 3000, 4000, 5000), round(count($codes) / 3));

出力:

Array
(
    [0] => Array
        (
            [0] => 1000
            [1] => 2000
        )

    [1] => Array
        (
            [0] => 3000
            [1] => 4000
        )

    [2] => Array
        (
            [0] => 5000
        )

)
于 2012-06-03T05:05:22.570 に答える