我正在寻找是否可以有效解决问题的是/否答案。我很确定使用当前的计算技术状态是不可能的。我很高兴知道我错了。所以这里什么都没有。
我有一个2576
个数字列表。我试图在列表中找到总计为44576.54
的数字组合。数字列表包含从5位数(精确到两位数)到8位数(精确到两位数)的数字。
我非常感谢你的帮助!
答案 0 :(得分:0)
你错了。经典的动态编程算法将在现代计算硬件上快速解决这个问题。
答案 1 :(得分:0)
这是动态编程算法,已在Emercoin引擎中实现,用于选择最佳UTXO子集。 有关此解决方案,请参阅source code和article。
该算法的一般思路如下:
你有一套"棒"长度不同(长度是你的数字值)。 您需要选择棒的子集,总长度为4457654。
让你创建标志的LINE,sum + 1的长度,即4457655.LINE [i] = 1,如果值为" i"找到,并且如果为值的子集,则为零,并且#34; i"找不到。最初,整个数组都是零填充的,因为没有找到任何总和。
Mark LINE [0]:= 1;这是意思,$ 0.00的总和可以很容易找到 - 这是空子集。
while(LINE [4457654] == 0):
答案 2 :(得分:0)
基本上这个问题有两个解决方案:
动态编程:复杂性总和* n,因此在您的情况下,这将非常大,您的程序将无法完成数天。
回溯跟踪解决方案:复杂性2 ^ n,这意味着您的程序不会结束多年,这就是为什么它被称为NP-Hard问题
我一直在研究子集求和问题很长一段时间,我有一个算法,我已经测试了n = 400,它在几秒钟内得到结果。 目前我正在撰写论文以便将其发布。分享您的意见。我会告诉你它是什么子集,这也将帮助我验证我的算法是否存在真正的问题。
顺便说一句,你能告诉我为什么你需要获得子集总和吗?你的用例是什么?