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

标签 algorithm math

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

给定 n 个对象,n 至少为 2 的整数,我需要在 p 组之间平均分配它们,其中 p 大于或等于 2 且 n 大于或等于 p,其中“等于”的意思如下:每个组包含 q 成员; q 至少为 1。组的成员数量决定了该组的“权重”,因为 n 对象应该分布为更大的组(即更多的成员) ) 得到更多的对象。但是,每个组必须至少收到一个对象。

示例:给定 n=5 对象和两组 p_1p_2 以及 q_1=1q_2=9p_1 得到 1 个对象,p_2 得到 4.

最佳答案

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

// 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

关于algorithm - 在 p 组 q 成员中分配 n 个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45975688/

相关文章:

algorithm - 我的算法不起作用

algorithm - 确定某物的 x 和 y 以使其遵循 2 个关键帧之间的曲线的算法是什么?

c++ - long double 输出的精度不正确。可能出了什么问题?

javascript - 几何 - 计算点到线的距离

python - 优化算法以处理元组、集合和字典

javascript - 获取大数的同余javascript RSA算法

algorithm - 使用 N 个点从图像创建凹多边形

c++ - 如何将稀疏矩阵和密集 vector 相乘?

c# - 二维柏林噪声。为什么我必须采用位移和梯度向量的点积?

Java,首先从 O(n) 时间复杂度的数组中复制值