【发布时间】:2011-10-06 07:36:37
【问题描述】:
我在这里发布了一些与我一直在尝试工作的项目相关的内容,但我一直遇到设计问题并且不得不从头开始设计。所以我想知道我是否可以发布我正在尝试做的事情,并且有人可以帮助我了解如何获得我想要的结果。
背景:
我是编程新手,正在努力学习。所以我做了一个让我感兴趣的项目,它基本上涉及列出列表并仅使用列表中的数字分解每个数字。我知道我可以很容易地暴力破解(我确实这样做了),但我也想学习 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]]}
这种方法的逻辑是计算列表中下一个可能的数据不需要时间,所以如果我发送一个包含一百万个数字的列表,它可以快速完成,甚至可以扩展到 hadoop 集群。
我创建的代码是here,但这个问题是关于如何纠正设计问题。我得到建议,这是一个分区问题,并环顾四周,发现了我尝试做的更简单的版本(activestate),但这并不完全是我想要做的,因为它分解了一个数字并且不使用一个特定的数据集来做到这一点。
问题:
所以希望我清楚地描述了我正在尝试做的事情。我需要阅读/学习/学习什么才能使用动态编程在 python 中创建列表的分区表,以便它可以扩展?这只是一种爱好,对时间不敏感,但我觉得我已经为此工作了 3 个多月,每次遇到设计问题时,我都不得不从头开始。如何正确构建它(要查看我的错误方式,请参见上面的链接)?我在谷歌上搜索并找到了背包问题和分区问题的解决方案,但它们似乎更多地用于学校工作,而不是真正为大规模数据集而构建。
希望有人能给我一些见解,但无论如何感谢您阅读本文。
【问题讨论】:
标签: python algorithm partitioning dynamic-programming