Algorithm N非;重叠最优分割
这是我几天前遇到的一个问题。 给定一个整数项列表,我们希望将这些项划分为最多N个不重叠的连续存储箱,以最小化任何存储箱中的最大项数。 例如,假设给了我们项目(5、2、3、6、1、6),我们想要3个箱子。我们可以按如下方式对其进行优化划分:Algorithm N非;重叠最优分割,algorithm,grouping,Algorithm,Grouping,这是我几天前遇到的一个问题。 给定一个整数项列表,我们希望将这些项划分为最多N个不重叠的连续存储箱,以最小化任何存储箱中的最大项数。 例如,假设给了我们项目(5、2、3、6、1、6),我们想要3个箱子。我们可以按如下方式对其进行优化划分: n
- n<3:1,2(2项)
- 3给定
bin和一个包含n
项的数组,下面是一个可以使用的贪婪算法 要最小化箱子中的最大项目数:p
p给定
bin和一个包含n
项的数组,下面是一个可以使用的贪婪算法 要最小化箱子中的最大项目数:p
p以下是一些psudocode,它将为您提供一个具有尽可能少的存储箱数量的解决方案:
Sort the list of "Elements" with Element as a pair {Value, Quanity}. So for example {5,2,3,6,1,6} becomes an ordered set: Let S = {{1,1},{2,1},{3,1},{5,1},{6,2}} Let A = the largest quanity of any particular value in the set Let X = Items in List Let N = Number of bins Let MinNum = ceiling ( X / N ) if A > MinNum then Let MinNum = A Create an array BIN(1 to N+1) of pointers to linked lists of elements. For I from 1 to N Remove as many elements from the front of S that are less than MinNum and Add them to Bin(I) Next I Let Bin(I+1)=any remaining in S LOOP while Bin(I+1) not empty Let MinNum = MinNum + 1 For I from 1 to N Remove as many elements from the front of Bin(I+1) so that Bin(I) is less than MinNum and Add them to Bin(I) Next I END LOOP
您的最小存储箱大小可能是
,MinNum
到bin(1)
将包含值的分布。以下是一些psudocode,它将为您提供一个具有最小存储箱数量的解决方案:bin(N)
Sort the list of "Elements" with Element as a pair {Value, Quanity}. So for example {5,2,3,6,1,6} becomes an ordered set: Let S = {{1,1},{2,1},{3,1},{5,1},{6,2}} Let A = the largest quanity of any particular value in the set Let X = Items in List Let N = Number of bins Let MinNum = ceiling ( X / N ) if A > MinNum then Let MinNum = A Create an array BIN(1 to N+1) of pointers to linked lists of elements. For I from 1 to N Remove as many elements from the front of S that are less than MinNum and Add them to Bin(I) Next I Let Bin(I+1)=any remaining in S LOOP while Bin(I+1) not empty Let MinNum = MinNum + 1 For I from 1 to N Remove as many elements from the front of Bin(I+1) so that Bin(I) is less than MinNum and Add them to Bin(I) Next I END LOOP
您的最小仓位大小可能是
,MinNum
到bin(1)
将包含值的分布。您对此有何看法?这更像是一个算法问题,为什么只使用bin(N)
tag,只是好奇而已?欢迎来到StackOverflow。要获得更好的回答和更少的反对票,请先浏览,然后阅读,尤其是和,然后根据这些指导原则发布您的问题。java
-您确定吗?也许将最大项目数最小化
?对不起,这是第一次。是的,它是最大限度地减少项目数量。我不知道这个问题。我想我需要先分类。但下一步是什么?你需要找到所有的解决方案,还是只有一个?有时可能会有多个最佳分组。您对此有何看法?这更像是一个算法问题,为什么只使用会最小化平均值或桶中的(max-min)
tag,只是好奇而已?欢迎来到StackOverflow。要获得更好的回答和更少的反对票,请先浏览,然后阅读,尤其是和,然后根据这些指导原则发布您的问题。java
-您确定吗?也许将最大项目数最小化
?对不起,这是第一次。是的,它是最大限度地减少项目数量。我不知道这个问题。我想我需要先分类。但下一步是什么?你需要找到所有的解决方案,还是只有一个?有时可能有多个最佳分组。会最小化平均值或桶中的(max-min)