我在这里发布了一些与我一直在尝试工作的项目相关的内容,并且我一直在打击设计问题,并且必须从头开始设计。所以我想知道我是否可以发布我想要做的事情,并且有人可以帮助我理解我如何获得我想要的结果。使用动态编程对列表进行分区
背景:
我新的编程和努力学习。因此,我参与了一个对我感兴趣的项目,其中涉及基本上使用列表并仅使用列表中的数字来分解每个数字。我知道我可以很容易地蛮力(这是我做的),但我也想学习Hbase,Hadoop和并行处理,所以我希望能够通过各种机器打破这个过程。我认为这样做的方式是使用动态编程和递归来创建可能进一步细分的可能性表。
例子:
如果我提交名单:[1,2, 4]
我应该得到{1: [[1]], 2: [[1, 1]], 4: [[2, 2]]}
。它的基本意思是2 + 2 = 4,1 + 1 = 2,1 = 1 ..因此,我试图查看所有的方法来创建4,我可以查找这个列表(它将在数据库中)和看2 + 2 = 4,然后分解2 ..等等..我有查找工作工作,但我有问题的故障。使用蛮力不会让我使用大数字(比如说百万,列表中有一千个数字),这样我就可以使用hadoop或其他工具来扩展它。以下是可能的结果更多的例子:
[1,2, 3, 4] = {1: [[1]], 2: [[1, 1]], 3: [[1, 2]], 4: [[1, 3], [2, 2]]}
[1,2, 3, 4, 6, 10] = {1: [[1]], 2: [[1, 1]], 3: [[1, 2]], 4: [[1, 3], [2, 2]], 6: [[2, 4], [3, 3]], 10: [[4, 6], [2, 2, 2, 2, 2]]}
[10, 30, 50] = 50: [[10, 10, 30]], 30: [[10, 10, 10]]}
这种方法的逻辑是,它不会花时间在列表中COMPUT下一个可能的数据,所以如果我发送列表一百万的数字它可以快速做到甚至扩展到hadoop集群。
我创建的代码是here,但问题在于如何纠正设计问题。我得到了这样的建议:这是一个分区问题,并且环视四周,发现了我想要做的更简单的版本(activestate),但它并不完全是我想要做的,因为它分解了一个数字,并没有使用特定的数据集来做到这一点。
问:
所以希望我清楚地描述了我想要做的事。我需要阅读/学习/学习如何使用动态编程在python中创建列表的分区表,以便扩展?它只是一种业余爱好,而不是时间敏感,但我觉得我已经在这方面工作了3个多月,每次遇到设计问题时都必须从头开始。我如何正确构建这个(看我的不正确的方式看到我的链接上面)?我已经搜索并找到了背包问题和分区问题的解决方案,但它们似乎更适合于学校工作,并且不是真正用大数据集来扩展。
希望有人能给我洞察力,但不管感谢您阅读本文。
非常感谢你花时间回答这个问题,弗兰克。我认为动态编程基本上帮助我生成了基于预先计算的表格,但是我想到了它,并且有了这样的想法,也许我不需要给动态函数整个列表,也许我可以分解列表以便处理它有点独立。例如,4可以分解为[2,2],2可以是[1,1],但我不需要在同一个cpu上执行此操作,因为它们看起来是独立的。同样为了节省CPU时间,我没有计算整个列表,但我只想到下一个变量。 – Lostsoul
虽然我不完全了解您的解决方案。我见过其他人(当谈到DP时)也给我展示了simlair表,但[1,4]意味着什么? 1可以产生4?如果是这样,它将如何使用[1,2,4]列表解决5的数目。正确答案应该是[4 + 1],但我不确定如何生成列表以获得该结果。 – Lostsoul
在这种方法中[1,4]是你的解决方案的一部分,因为它被认为是1 + 4构成5.注意,第一步只创建不同的可能的总和,但不关心这个总和的值。 – Frank