Algorithm 算法:通过最小化所有子列表之间元素和的最大差异,将值列表分离为子集
我有一个值(整数)列表,我想将其拆分为B个非空子列表,而不改变它们的初始顺序。目标是调整文本的大小,使其适合定义的区域 每个子列表将有一个与之关联的度量:其值的总和。我希望最小化所有子列表中最大和和与最小和之间的差异。这将允许我将文本划分为具有大致相同文本量的行 编辑 正如所建议的那样,它还可以最小化最大和,因为这将导致最小化文本行的最大长度 示例: 给定列表L={2,3,4,5,6}和B=2 解决方案:L1={2,3,4}和L2={5,6}。和(L1)=9,和(L2)=11,差=2Algorithm 算法:通过最小化所有子列表之间元素和的最大差异,将值列表分离为子集,algorithm,complexity-theory,computation-theory,Algorithm,Complexity Theory,Computation Theory,我有一个值(整数)列表,我想将其拆分为B个非空子列表,而不改变它们的初始顺序。目标是调整文本的大小,使其适合定义的区域 每个子列表将有一个与之关联的度量:其值的总和。我希望最小化所有子列表中最大和和与最小和之间的差异。这将允许我将文本划分为具有大致相同文本量的行 编辑 正如所建议的那样,它还可以最小化最大和,因为这将导致最小化文本行的最大长度 示例: 给定列表L={2,3,4,5,6}和B=2 解决方案:L1={2,3,4}和L2={5,6}。和(L1)=9,和(L2)=11,差=2 给定列表
给定列表L={1,1,8,1,1,1,8,1}和B=3 解决方案:L1={1,1,8},L2={1,1,1}和L3={8,1}。和(L1)=10,和(L2)=3,和(L3)=9,差=7 我的建议 由于我没有IT背景,我不知道如何处理这个问题。 首先,我试图计算出可以将原始集合拆分为B个子列表的组合数。原始列表中元素的数量为N,则可能存在的拆分数量等于: 然后我试着看看什么是找到全局最小值的合适算法。我认为,如果我遇到以下两个条件都得到尊重的情况,我会达到全球最低水平
- 将一个元素从一个最大的子列表移动到另一个相邻的子列表中并不能改善差异
- 将元素从最小的子列表中的一个移动到相邻的子列表中的一个不会改善差异
谢谢大家! Q:上述两个条件是否足以保证全局最小值(对于差异)? A:不 考虑以下列表:
{6,5,2,4,3,7},B=3
以及以下可能的解决方案:
{6} {5,2,4} {3,7}; Sums=(6,11,10), DIFF = 11-6 = 5
{6,5} {2,4,3} {7}; Sums=(11,9,7), DIFF = 11-7 = 5
最大组中的所有一个元素更改都会使差异变差,或者保持不变:
{6,5} {2,4} {3,7}; Sums=(6,11,10), DIFF = 11-6 = 5
{6} {5,2} {4,3,7}; Sums=(6,7,14), DIFF = 14-6 = 8
{6} {5,2,4,3} {7}; Sums=(6,14,7), DIFF = 14-6 = 8
但有一个更好的解决方案:
{6} {5,2,4} {3,7}; Sums=(6,11,10), DIFF = 11-6 = 5
{6,5} {2,4,3} {7}; Sums=(11,9,7), DIFF = 11-7 = 5
因此,您的方法只找到局部极小值,而不是全局极小值。您是否需要一种算法来始终找到精确的最佳可能解?或者是一个能找到接近最优解的启发式方法可以接受吗?嘿。谢谢你的回复。集合确实是列表,因为在将元素从一个子列表移动到另一个子列表时,必须考虑元素的位置。更正我前面的评论:您描述中的“元素之和”不是子列表的参数,相反,这是一个衡量标准。用简单的英语谈论真正的问题可能会更简单“目标是调整文本大小,使其适合定义的区域”。我们都有一个直观的理解,即单词应该保持其顺序,只在单词之间分割,而不是最终在单词之间分割,您确定要最小化最大和最小总和之间的差异吗?另一个选择是简单地最小化最大的SUM。感谢您给出的示例。但据我所知,您的示例表明全局最优可能不是唯一的(几个分割可能导致相同的度量)。它并没有提供更好的解决方案?@Gordak-oops,对。我会看看我是否能提供一个正确的反例…@Gordak好的,我相信我已经发布了一个正确的反例。好的,所以这两个条件是不够的。最后一部分有一个小改动:DIFF=11-4=5(即DIFF=11-7=4。感谢您花时间找到一个好的反例。@Gordak OK,现已修复。