我在這裏發佈了一些與我一直在嘗試工作的項目相關的內容,並且我一直在打擊設計問題,並且必須從頭開始設計。所以我想知道我是否可以發佈我想要做的事情,並且有人可以幫助我理解我如何獲得我想要的結果。使用動態編程對列表進行分區
背景:
我新的編程和努力學習。因此,我參與了一個對我感興趣的項目,其中涉及基本上使用列表並僅使用列表中的數字來分解每個數字。我知道我可以很容易地蠻力(這是我做的),但我也想學習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