【发布时间】:2016-01-07 23:33:48
【问题描述】:
我正在为整数分解的特定情况寻找一种有效的解决方案。高效是指比我目前拥有的 O(2^n) 快得多(n 表示完成后数组中的元素数)。
假设我们有以下数组:[4, 5, 11] 和“目标”为 84。
我们想知道是否可以满足4*a + 5*b + 11*c = 84,
考虑到以下约束:
- 0
- 0
- 0
如果我们没有找到解决方案,我们将一个整数添加到数组中,比如 15:[4, 5, 11, 15]
现在我们想知道有没有什么可以满足4*a + 5*b + 11*c + 15*d = 84
考虑到
- 0
- 0
- 0
- 0
...我们重复这个过程,直到找到解决方案,或者最多 n 次。我想知道我们是否可以利用问题的重复性来找到有效的解决方案:
- “目标”没有改变
- 整数按升序排列
- 每次添加新元素时,a、b、c... 的最大约束都会增加 1
- 每次重复都会向公式中添加一些内容,但没有任何更改(除了约束)
有什么想法吗?
【问题讨论】:
-
当您有第一个公式的解决方案时(使用 a、b 和 c),您可以使用所有其他公式的解决方案完全相同,只需将其余变量(d、e 等...)设置为 0。
-
哦,对不起,如果我使用了错误的术语。我应该怎么称呼它?
-
@Amit 一旦我们找到解决方案(在任何步骤),我们就可以停止该过程。我会将此信息编辑到问题中。
-
如果我是对的,这个问题属于已知为 NP-hard 的“整数线性规划”类。所以没有希望找到一个快速(多项式)的解决方案。
标签: algorithm math integer diophantine