【问题标题】:Dividing set of integers划分整数集
【发布时间】:2015-02-13 00:34:38
【问题描述】:

我有一个算法问题的解决方案,如下所述。

我们有一组整数(例如数组)。我们的任务是将它们分成总和彼此相等的组(它们不必具有相同数量的元素)。如果原始集合不能被划分,我们必须给出“不可能划分”的答案。

例如: 将A 设置为[-7 3 3 1 2 5 14]。答案是[-7 14], [3 3 1], [2 5]

似乎很容易说什么时候肯定是不可能的。当原始集的总和不能被 3 整除时:sum(A) % 3 != 0

你知道如何解决这个问题吗?

【问题讨论】:

  • 你必须将给定的数组分成 3 个部分吗?另外,您在寻找什么样的解决方案复杂性?
  • 一个简单的解决方案是简单地返回原始集合!
  • 即使我们不能分成3个这样的集合,解决方案也是不可能的。例如,{1000, 1001, 1002, 3} 的总和可被 3 整除,但不可能分成总和相等的子集。
  • @user1952500:Pączek 不是这么说的。如果总和不能被集合的数量整除,那么您确定这是不可能的。问题是,如果是这样呢?
  • @Jongware 第一个声明没有这么说。第二个就是你说的。

标签: algorithm divide partition-problem


【解决方案1】:

这是partition problem3-partition problem 变体,区别在于经典分区问题将集合分成两个集合(不是三个),它们的总和彼此相等。这个问题是 NP 完全的,所以你几乎肯定不会找到它的多项式时间解; 2 分区问题具有伪多项式时间解,但 3 分区问题没有。

请参阅this answer,了解如何将 2 分区算法调整为 3 分区算法的概要。另请参阅 this paper 了解并行解决方案。

【讨论】:

  • 谢谢@Zim-Zam O'Pootertoot!我不知道分区问题,所以我不知道我应该问什么;)链接,答案和论文,我发现非常有用和有趣。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 2017-09-22
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多