2017-02-01 13 views
0

ここに私が直面している問題があります。私はいくつかのアイテムを持っています。私はそれらに付けられた重量(0と1の間の)を持つ様々な数のバケツを持っています。私は、各バケットに入るべきアイテムのパーセンテージを計算しようとしています。重み付き分配率を計算するアルゴリズム

たとえば、のは、私が20の項目と3つのバケツ持っているとしましょう:

  • B1を - 重量:0.5
  • B2 - 重量:0.5
  • B3 - 重量:0.25

その割合は次のようになります。

  • B1 - アイテムの40%= 8アイテム
  • B2 - アイテムの40%= 8つの項目
  • B3 - アイテムの20%= 4件の商品

すべての項目がバケットに分配されるように、パーセンテージが100%に追加しなければなりません。上記の例では、B1とB2はB3の2倍の重量を持つため、B3の2倍の項目を持つ必要があります。しかし、3つのバケツをすべてまとめると、B1アイテムの実際のパーセンテージは40%になります。

これにはすでにアルゴリズムがありますか、それとも解決する方法がありますか?

答えて

1

すべてのバケットからウェイトを合計し、各バケットのウェイトをその合計で除算して、バケットの合計のパーセンテージを導出します。

+0

完璧なことに、私は単純なことが分かっていましたが、私は完全に空白を描いていました。このメソッドは、必要に応じて機能します。 – msbware

3

各バケットの重量をすべてのアイテムの合計重量で除算するだけで、各バケットが負担するアイテムの割合を見つけることができます。

ただし、項目数とバケットの重みが均等に分かれない場合は、わずかな問題があります。たとえば、次のシナリオを考えてみましょう:

B1 - weight: 0.15 
B2 - weight: 0.15 
B3 - weight: 0.70 

そして、23の項目があるとしましょう。

その後、我々はただのアイテムの合計数に対する総重量の割合を乗じて各バケットに割り当てられるべき項目の数を計算することができます。この分数のバケットに対処することができ

B1 - weight: 0.15, 3.45 items 
B2 - weight: 0.15, 3.45 items 
B3 - weight: 0.70, 16.1 items 

1つのアルゴリズムを問題は、各バケットの項目数を一度に1つずつ計算し、残りを次の計算にシフトすることです。したがって、この例では、次のようにします:

B1 - 3.45 items, keep 3, rollover 0.45 
B2 - 3.45 items + 0.45 = 3.9 items, keep 3, rollover 0.9 
B3 - 16.1 items + 0.9 = 17 items (whole number, and last bucket) 
関連する問題