0

複数の配列に項目を分散するアルゴリズムが必要です。それが誰かに役立つなら、私はPHPでコーディングしています。基準は、アイテムの数が配列の数よりも少ない場合、配列を均等にスキップしたいということです。私が探しているものをよりよく理解するために、私の例の問題を確認してください。

例:

50 個のリストを持つことを検討してください。この 50 個のリストに配布したいアイテムが 20 個あります。20 項目しかないため、一部のリストは見逃されます。アイテムを均等に分配し、最初の 20 個のリストにアイテムを与え、最後の 30 個のリストには何も与えないなどのことを避けるには、どのような種類のアルゴリズムまたは何を行うことができますか?

編集:

さて、目的は、一部のリストがアイテムを受け取らないことです。したがって、アイテムを受け取るのは 20 個のリストだけです。

例: 8 つのリストがありますが、アイテムは 2 つしかありません。リスト 3 と 6 が 1 つのアイテムを受け取り、プロセスが完了するようにします。

前もって感謝します。

4

2 に答える 2

1

floor(#items/#lists)各リストにアイテムを入れます。

次に、残りの項目については、すべてに 1 つ入れますfloor(#lists/(#items % #lists))

于 2013-07-28T04:13:22.977 に答える
0

配列内のランダムなインデックスから始めて、配列の長さ + 配列の長さのモジュロ 1 だけインクリメントします。

function distribute_evenly(lists, items)
  last_index = random(length(lists))

  while length(items) > 0 do
    last_index <- mod(last_index + length(lists) + 1, length(lists))
    push(nth(lists, last_index), pop(items))

もちろん、関数がランダムな結果ではなく同じ結果を返すようにするために、他の手法もある可能性があります。たとえば、開始値として、リストの長さに最も近い素数、または最も近い 2 のべき乗などを使用できます。

于 2013-07-28T13:38:53.970 に答える