在p个q个成员组中分配n个对象

时间:2017-08-31 07:28:59

标签: algorithm math

我无法找到这个确切问题的答案:

鉴于nn个对象至少为2的整数,我需要在p组之间平均分配p n大于或等于2且{{} 1}}大于或等于p,其中,'同等',我的意思是:每组包含q个成员; q至少1.组成员的数量决定了组的“权重”,因为n对象应该分布,以便更大的组(即更多的成员)获得更多的对象。但是,每个组必须至少接收一个对象。

示例:给定n=5个对象以及两个组p_1p_2 q_1=1q_2=9p_1获取1个对象和{{ 1}} 4。

2 个答案:

答案 0 :(得分:0)

首先,没有要求每个组必须至少有一个对象:

统一绘制1到sum(q_n)=q_1+q_2+...+q_n

之间的整数

如果整数介于sum(q_i)sum(q_{i+1})之间,则将一个对象添加到组i

现在要确保每个组都有一个对象,只需向每个组添加一个对象(它不会改变加权分布)。

答案 1 :(得分:0)

你的问题不是很清楚。你可能想要这个:

// add 1 to each group and subtract from n
for (int i = 0; i < p; ++i)
    group[i] = 1;
n -= p;

while (n > 0)
{
    // find i, such that q[i] / group[i] is maximum
    int imax = 0;
    double max = q[0] / group[0];
    for (int i = 1; i < p; ++i)
    {
        if (q[i] / group[i] > max)
        {
            max = q[i] / group[i];
            imax = i;
        }
    }
    ++group[imax];
    --n;
}

请参阅https://en.wikipedia.org/wiki/D%27Hondt_method