当前位置: 首页 > 知识库问答 >
问题:

算法:通过最小化所有子列表之间元素和的最大差异,将值列表分离为子集

慕翰学
2023-03-14

我有一个值(整数)的列表,我想拆分成B非空子列表,而不改变它们的初始顺序。目标是调整文本的大小,使其适合定义的区域。

每个子列表将有一个与之关联的指标:其值的总和。我想最小化所有子列表中最大和和最小和之间的差异DIFF。这将允许我将文本分成几乎相同数量的文本行。

编辑

正如所建议的那样,它还可以最小化最大和,因为这将导致最小化文本行的最大长度。

示例:

给定列表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和DIFF=7

我的建议

由于我没有信息技术背景,我不知道如何处理这个问题。首先,我试图计算出我可以将原始集合分割成B子列表的组合数量。原始列表中的元素数量为N,那么可能存在的分裂数量等于:

然后我试着看看什么是找到全局最小值的合适算法。我想,如果我遇到了以下两个条件都得到尊重的情况,我就会达到全球最小值。

  • 将一个元素从(一个)最大的子列表移动到(一个)相邻的子列表中并不会改善差异。

(由于子列表不能为空,从只有一个元素的子列表中移动一个元素需要更改多个子列表)

问题

上述两个条件是否足以保证全局最小值(对于差异)?

你知道/记得解决这个问题的算法吗?或者你有解决这个的建议吗?

你有什么阅读建议来帮助我解决这类问题吗?

正如我所说,我没有It背景,也没有太多处理此类计算机理论问题的经验。

非常感谢。

共有1个答案

岑畅
2023-03-14

问:上述两个条件是否足以保证全局最小值(对于差异)?

A:没有

考虑下面的列表:<代码> {6,5,2,4,3,7},B=3 < /代码>

以及以下可能的解决方案

{6} {5,2,4} {3,7};  Sums=(6,11,10),  DIFF = 11-6 = 5

所有来自最大组的单元素更改都会使DIFF变得更糟,或者保持不变:

{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=(11,9,7),  DIFF = 11-7 = 5

所以你的方法只找到局部极小值,而不是全局极小值。

 类似资料:
  • 问题内容: 我有这个清单(): 我想要这样的东西: 换句话说,我想使用值作为分隔符将列表拆分为子列表,以获得列表列表()。我正在寻找Java 8解决方案。我已经尝试过,但是我不确定这是我要找的东西。谢谢! 问题答案: 我目前想出的唯一解决方案是实现自己的自定义收集器。 在阅读解决方案之前,我想添加一些有关此的注释。我将这个问题更多地当作编程练习,我不确定是否可以使用并行流来完成。 因此,您必须意识

  • 假设我有一个包含整数的数组。 如何找到大小的子集,使得子集中所有整数对之间的距离,我的意思是它们在最远的距离。 示例:数组和, ,最小距离为10和6之间的<错误的子集: ,最小距离为 ,最小距离为 我想到了一个解决办法: 1) 排序数组2)选择一个[0],现在在数组中查找ceil(a[0])=Y。。。。然后ceil(Y

  • 我看到一个问题,要求它找到所有相邻子阵列的最小值。例如,对于数组A=[1,2,3],答案将是一个包含[1,2,3,1,2,1]的数组B<怎么做- 我所做的是,构建了一个段树,但是它不包含所有连续子数组的最小值。 我也不认为我可以使用“脱钩”,因为我不必在特定长度的子数组中找到最小值。 那么,我如何获得所有连续子阵列(B阵列)的最小值?

  • 问题内容: 我有以下格式的多维列表: 如何获得所有子列表的第三个值的最大值。用伪代码: 我知道这可以通过遍历列表并将第三个值提取到新列表中,然后简单地执行来完成,但是我想知道是否可以使用lambda或列表理解来完成? 问题答案: 只需与生成器表达式一起使用: 另外,不要命名您的变量,而是要隐藏类型。

  • 我有一份清单。我想找到所有对和自身之间的欧几里德距离,并创建一个2D numpy数组。当对不同时,其自身之间的距离的位置和值将为0。列表列表的示例:我想要的结果是 x表示差异的值。周期意味着结果应遵循矩阵中所示。我需要python代码方面的帮助。行和列中0、1、2等的数量定义了内部列表索引。

  • 给定一个数组,求从所有可能的子数组中选择的最小元素和次最小元素的最大和。更正式地说,如果我们写出大小为 这个问题是关于GFG的,但我不理解它的解释。 请任何人给出它在O(n)时间复杂度下的解。