【问题标题】:Is there an algorithmic way to either of these two tasks in programming? [closed]在编程中这两个任务中的任何一个都有算法方法吗? [关闭]
【发布时间】:2013-06-22 22:25:20
【问题描述】:

我正在研究数学,我需要执行以下任务:

给定一组未指定的向量,确定哪些向量可以求和为恒等向量 (1, 1, ..., 1)

例如,考虑向量

x1 = (1 0 0)
x2 = (0 1 1)
x3 = (1 0 0)

如果将向量 x1 和 x2 相加,则得到 (1, 1, 1)

或者举个更大的例子

x1 = (1 0 0 0)
x2 = (0 1 1 0)
x3 = (0 0 1 1)
x4 = (0 0 0 1)

如果将向量 1、2 和 4 相加,则得到 (1, 1, 1, 1)

我需要一个一般可以做到这一点的算法。

第二个任务...给定一组未指定的数字,确定哪些数字的总和为 1。

例如:

x1 = 0.2
x2 = 0.5
x3 = 0.6
x4 = 0.4
x5 = 0.3
x6 = 0.1
x1 + x2 + x5 = 0.2 + 0.5 + 0.3 = 1

还有,x1 + x4 + x5 + x6 = 1

我需要能够对计算机进行编程以执行上述任务之一以进一步研究。

【问题讨论】:

  • 你试过了吗??
  • 是什么阻止了您对计算机进行编程来执行这些操作?你清楚地了解问题所在。它们并不难通过蛮力解决。只需枚举所有可能的组合,直到找到满足目标的组合。

标签: c++ algorithm visual-studio math computer-science


【解决方案1】:

对于第一个任务,它是subset sum problem 的变体,可以通过动态规划来解决。子集和问题与您的问题之间的区别在于子集和问题只有一维。在您的情况下,您需要扩展其动态编程方法以处理多个维度。

对于您的第二个任务,它与子集和问题相同。

【讨论】:

    【解决方案2】:

    是的,研究...

    从蛮力开始怎么样:创建集合的所有 2^N 个子集,然后为每个这样的候选者求和,如果它与目标匹配,则存储它。

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      相关资源
      最近更新 更多