python实现深度优先搜索_python中的深度优先搜索算法
假設(shè)我有一個(gè)函數(shù),它接受一個(gè)輸入($x iui$),然后經(jīng)過(guò)一個(gè)循環(huán)并生成一系列輸出($x{I,j}$)。然后,每個(gè)輸出可以再次作為同一函數(shù)的輸入,從而產(chǎn)生更多的輸出($x{i,j,k}$)。我試圖通過(guò)這個(gè)函數(shù)找到一組步驟,來(lái)達(dá)到一個(gè)特定的結(jié)束狀態(tài)。在
這是一個(gè)普遍的問(wèn)題,我的問(wèn)題是python中什么樣的代碼結(jié)構(gòu)可以處理這個(gè)問(wèn)題。在
以下是一些元代碼作為示例(盡管在實(shí)踐中可能更復(fù)雜):def f(x):
for i in range(n):
if some_condition:
yield g(x,i)
yield false
然后對(duì)于一些$x\u 0$和一些$y$,我們要尋找一個(gè)序列$x\u 0,x_1,\ldots,x_k$,這樣$x_k=y$,而$x{j+1}=g(x_j,i_j)$,對(duì)于{0,\ldots,k-1}$。在
要使用深度優(yōu)先搜索來(lái)實(shí)現(xiàn)這一點(diǎn),首先要計(jì)算$f(f(\ldots f(x)\ldots))$,直到它生成目標(biāo)結(jié)果或?yàn)閒alse。然后后退一步,從$f$得到第二個(gè)結(jié)果,然后重復(fù)(這是一個(gè)粗略的描述,但是你得到的想法是:基本上是深度優(yōu)先搜索)。在
在我看來(lái),yield關(guān)鍵字處理這個(gè)問(wèn)題的效率很低。您還必須處理$(x,f(x),f(f(x)),\ldots)$的堆棧(我認(rèn)為這是正確的術(shù)語(yǔ)),以便您在遇到死胡同時(shí)能夠后退。在
這個(gè)一般性的問(wèn)題是我經(jīng)常遇到的,我在某種程度上解決了它即席,但我想知道是否有一個(gè)很好的通用結(jié)構(gòu)來(lái)解決這個(gè)問(wèn)題,它自然而有效地處理堆棧并探索python中可能的解決方案樹(shù)。在
我希望這個(gè)問(wèn)題足夠清楚。我歡迎任何想法、評(píng)論、澄清或回答。在
總結(jié)
以上是生活随笔為你收集整理的python实现深度优先搜索_python中的深度优先搜索算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SOFT Workplace 软件使用说
- 下一篇: 怎么理解python语言_Python语