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 以最佳方式安排人群_Algorithm - Fatal编程技术网

Algorithm 以最佳方式安排人群

Algorithm 以最佳方式安排人群,algorithm,Algorithm,我有一个家庭作业,我想我已经解决了,但我不能完全确定,因为我无法证明我的解决方案。我想谈谈我所做的,它的正确性,以及是否有更好的解决方案 问题如下:我们有N组的人,其中i组中有g[i]人。我们想把这些人分别放在两排S座位上,这样:每组只能放在一行,以连续的顺序,或者如果组中有偶数个成员,我们可以将他们分成两行,然后放在两行,但条件是他们必须形成一个矩形(因此,两排座位的索引必须相同)。需要多少个座位才能保证没有人站起来 示例:组为4 11。最小值S为11。我们将所有4放在一行,11放在第二行。另

我有一个家庭作业,我想我已经解决了,但我不能完全确定,因为我无法证明我的解决方案。我想谈谈我所做的,它的正确性,以及是否有更好的解决方案

问题如下:我们有
N
组的人,其中
i
组中有
g[i]
人。我们想把这些人分别放在两排
S
座位上,这样:每组只能放在一行,以连续的顺序,或者如果组中有偶数个成员,我们可以将他们分成两行,然后放在两行,但条件是他们必须形成一个矩形(因此,两排座位的索引必须相同)。需要多少个座位才能保证没有人站起来

示例:组为
4 11
。最小值
S
11
。我们将所有
4
放在一行,
11
放在第二行。另一组为
6 2
。我们将
6
分为两行,也就是两行。因此,最小值为
4
座位

这就是我的想法:

计算
T=(所有组的总和+1)/2
。将组号存储在一个数组中,但将所有偶数值
x
拆分为两个
x/2
值。因此
45
变为
25
。现在在该向量上运行,找到可以形成的大于或等于
T
的最小值。该值是每行nee的最小座位数迪德

示例:
411=>2211=>T=(15+1)/2=8
。我们可以从
2211
形成的最小值是
=8
11
,所以这就是答案

这似乎是可行的,至少我找不到任何反例。但我没有证据。直观地说,似乎总是可以根据此算法提供的座位数在要求的条件下安排人员


感谢您的任何提示。

我认为您的解决方案是正确的。在最佳分配中,每排座位的最小数量将是您的T(这在数学上是显而易见的)

拆分偶数也是正确的,因为它们有两种可能的排列方式;通过逻辑地将所有“矩形”人群放在座椅排的一端,您还可以保证他们始终形成一个合适的矩形,从而也满足此条件


所以问题归结为找到一个等于或尽可能接近T的和(例如).

次要nit:我不确定上述建议的解决方案是否适用于每个组都有
0
成员的边缘情况,因为
T=SUM ALL+1/2
中的分子总是正的,所以永远不会有大于或等于
T
的子集和

为了解决这个问题,这里可能需要一个模运算。我们知道,如果
n
是最大奇数项,我们至少需要
n
一排的座位,所以方程中可能应该有一个
max(n*(n%2))
项。它将变成
max(奇数)
或0。由于最大奇数项总是添加到
S
,我认为这是安全的(在没有证据的情况下用粗体表示…)


然后我们想知道我们是否应该拆分偶数项。这里是子集求和方法可能有效的地方,但是
T
简单地等于
sum ALL/2

,所以你至少需要和人数一样多的座位,对吗?(但在你的例子中,这不成立)@Mark Elliot-它似乎成立。他说“每人两排S座”。@IVlad:我读到“S座的最小数量是多少,这样就没有人站起来了?”?";尽量减少总座位比减少任何一排座位更有意义,如果空位无关紧要,那么每排的最小座位数就是最小的奇数,这不是一个有趣的问题。@Mark Elliot-你的阅读与我的阅读并不矛盾。两排都有
s
座位,问题是要求最小
S
这样就没有人站起来了。第一个例子意味着你可以有空座位。