我正在寻找一种特定整数因子分解的有效解决方案。有效率我的意思比O(2^n)
快得多,我目前拥有它(n表示完成后数组中元素的数量)。
假设我们有以下数组:[4, 5, 11]
和“目标”84。
我们想知道是否可以满足4*a + 5*b + 11*c = 84
,
给出以下约束:
如果我们找不到解决方案,我们会在数组中添加一个整数,比方说15:[4, 5, 11, 15]
现在我们想知道是否满足4*a + 5*b + 11*c + 15*d = 84
鉴于
...我们重复这个过程,直到找到解决方案,或者最多n次。我想知道我们是否可以利用问题的重复属性来找到有效的解决方案:
有什么想法吗?
答案 0 :(得分:3)
首先,这个词是错误的。它不是integer factorization,而是一个线性diophantine equation,其中包含许多带有一些额外约束的变量。
没有你的约束,这将是一件容易的事。只需找到GCD(list of coefficients)
,如果它除了免费术语 - 你有一个解决方案,否则它没有。
使用你的约束它可能是第一步,但是如果你看到有解决方案,它们可能不满足约束。
我没有看到快速(多项式解决方案)所以这就是我将如何解决它。你有
我会在middle approach中使用meet,并将约束分为两部分:
我会将它们分开,以便在两个部分中执行的计算次数大致相同(考虑到约束条件)。
现在,您遍历第一部分并将所有内容存储在字典中。然后迭代第二个并检查字典中是否存在答案。如果是,您找到了解决方案。
这将指数除以2,但需要记忆。
此math answer可能有助于某人找到一种我无法找到的更好的方法。