Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在q成员的p组中分布n个对象_Algorithm_Math - Fatal编程技术网

Algorithm 在q成员的p组中分布n个对象

Algorithm 在q成员的p组中分布n个对象,algorithm,math,Algorithm,Math,我无法找到这个问题的答案: 给定n对象的n至少为2的整数,我需要在p组之间平均分配它们,其中p大于或等于2和n大于或等于p,其中,通过“相等”,我的意思是:每个组包含q成员q至少1个。一个组的成员数量决定了该组的“权重”,因为n对象应该分布在较大的组(即更多的成员)中以获得更多的对象。但是,每个组必须至少接收一个对象 示例:给定n=5对象和两组p_1和p_2和q_1=1和q_2=9,p_1得到1个对象和p_24。首先,不要求每个组必须至少有一个对象: 统一绘制一个介于1和sum(q_n)=q_1

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

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


示例:给定
n=5
对象和两组
p_1
p_2
q_1=1
q_2=9
p_1
得到1个对象和
p_2
4。首先,不要求每个组必须至少有一个对象:

统一绘制一个介于1和
sum(q_n)=q_1+q_2+…+q_n之间的整数

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


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

首先,不要求每个组至少有一个对象:

统一绘制一个介于1和
sum(q_n)=q_1+q_2+…+q_n之间的整数

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


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

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

// 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;
}
//每个组加1,然后从n中减去
对于(int i=0;i0)
{
//求i,使q[i]/组[i]最大
int imax=0;
双最大值=q[0]/组[0];
对于(int i=1;imax)
{
max=q[i]/组[i];
imax=i;
}
}
++组[imax];
--n;
}

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

// 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;
}
//每个组加1,然后从n中减去
对于(int i=0;i0)
{
//求i,使q[i]/组[i]最大
int imax=0;
双最大值=q[0]/组[0];
对于(int i=1;imax)
{
max=q[i]/组[i];
imax=i;
}
}
++组[imax];
--n;
}

。。。问题是,‘有没有实现这种分布的算法?’输入是什么?你要指定n和p?更清楚的是,听起来“平等”并不重要;i、 e.群体的规模不同?我不清楚q_2=9在你的例子中的意思是什么?分布应该根据群体的“规模”,而“规模”是由成员的数量决定的。输入是n,p_i(i组)和q_i(p_i组的q个成员)。q_2=9表示组p_2的9个成员。。。。问题是,‘有没有实现这种分布的算法?’输入是什么?你要指定n和p?更清楚的是,听起来“平等”并不重要;i、 e.群体的规模不同?我不清楚q_2=9在你的例子中的意思是什么?分布应该根据群体的“规模”,而“规模”是由成员的数量决定的。输入是n,p_i(i组)和q_i(p_i组的q个成员)。q_2=9表示p_2组的9名成员。是的,我相信这正是我想要的。是的,我相信这正是我想要的。