0
所以讓我們說我有幾個節點。每個節點都有一個可以到達的節點列表。這個節點列表可以包含它自己。我需要做的是構建一個節點可以採用的長度爲n的所有可能路徑。從遞歸函數產生
例如:讓我們假設一些事情。
- 我有節點A和節點B
- 我需要的是三長(無短)
- 節點A可以去自己和B節點
- 節點B可以去自己所有可能的路徑和節點A
假設然後我可以建立所有路徑是:
- AA一個
- AAB
- ABA
- ABB
- BAA
- BAB
- BBA
- BBB
這是我現在所擁有的代碼;它可以工作,但在我的實際情況中,我需要八條路徑,並且有很多節點。這顯然會導致一些性能問題。我碰到了一個32位版本的Python2.7上運行的MemoryError。我還沒有嘗試過64位版本。手頭上顯而易見的問題是我目前的實施。我想也許使用產量/發電機會有所幫助。會嗎?如果是這樣,我甚至會如何在我的情況下實施收益率?
此外,如果Python 3有一些功能可以實現我所要求的功能,我並不侷限於Python 2。 Python 2恰好是我表現最好的計算機上的東西。
PARTS = 3
def dive(node, depth=0):
combos = []
if depth >= PARTS - 1:
if node.key:
return ((node.key,),)
return()
for next_ in node.next_nodes:
for combo in dive(next_, depth=depth+1):
if not node.key:
continue
combos.append((node.key,) + combo)
return combos
雖然它不起作用。我從來沒有使用太多的產量,所以我不知道如何使用它。我知道奇怪的東西開始發生,不用多謝遞歸,我敢肯定。 –
它不工作是不是非常有用的診斷爲什麼它不工作......它當然應該......我認爲至少 –
不知道什麼將在Python2 +工作。但是在Python 3.3+中使用'yield from'並在第一個yield下添加'return'來防止無限遞歸。 –