假設我有一個函數,它接受一個輸入($x iui$),然后經過一個循環并生成一系列輸出($x{I,j}$)。然后,每個輸出可以再次作為同一函數的輸入,從而產生更多的輸出($x{i,j,k}$)。我試圖通過這個函數找到一組步驟,來達到一個特定的結束狀態。在
這是一個普遍的問題,我的問題是python中什么樣的代碼結構可以處理這個問題。在
以下是一些元代碼作為示例(盡管在實踐中可能更復雜):def f(x):
for i in range(n):
if some_condition:
yield g(x,i)
yield false
然后對于一些$x\u 0$和一些$y$,我們要尋找一個序列$x\u 0,x_1,\ldots,x_k$,這樣$x_k=y$,而$x{j+1}=g(x_j,i_j)$,對于{0,\ldots,k-1}$。在
要使用深度優先搜索來實現這一點,首先要計算$f(f(\ldots f(x)\ldots))$,直到它生成目標結果或為false。然后后退一步,從$f$得到第二個結果,然后重復(這是一個粗略的描述,但是你得到的想法是:基本上是深度優先搜索)。在
在我看來,yield關鍵字處理這個問題的效率很低。您還必須處理$(x,f(x),f(f(x)),\ldots)$的堆棧(我認為這是正確的術語),以便您在遇到死胡同時能夠后退。在
這個一般性的問題是我經常遇到的,我在某種程度上解決了它即席,但我想知道是否有一個很好的通用結構來解決這個問題,它自然而有效地處理堆棧并探索python中可能的解決方案樹。在
我希望這個問題足夠清楚。我歡迎任何想法、評論、澄清或回答。在