限界分支法优先级队列方式出口和追踪解的两种方法总结
生活随笔
收集整理的這篇文章主要介紹了
限界分支法优先级队列方式出口和追踪解的两种方法总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在優先級隊列分支限界法法中,何時為出接口,也就是while循環何時退出了?
解空間為[0,1,2…,n-1],當depth = n-1時,就可以記錄結果了,可以考慮循環體退出了(實際上能不能出,還要看他的權夠不夠大,不夠大的話,還是要老老實實的去選擇優先級高的分支),換句話來說,一旦有一個一個葉子節點彈出了,循環體就結束了
然后就是最優解和最優解方案的追蹤
一般來說有兩種方案:
在每個活結點(就是要存入優先級隊列的數據)中保存從root到當前結點的路徑path,也就是一個數組,這個數組可以是一個等長的,前面保存的是走過的路徑,后面是還未走過的路徑,所以一旦得到彈出的葉節點,我們就可以從中得到path,注意這個結點結構里沒有保存他的前驅結點的指針
另外一種實現方案:就是完全把解空間看出一個空間樹,樹的結點該有的信息,都保存下來,比如權重,用于結點優先級排序,當前的選擇,就是當前你是選擇了那個分支或者叫做結點,最重要的是它的前驅結點是誰,不管是什么樹,他的前驅結點只有一個,我們得到了葉子結點,就可以從葉子追溯到root,實際上上述就是在***構造部分解空間樹***
我們之前學習回溯法或者分支限界法,可能會有疑問,都說過解空間是一棵解空間樹,子集樹,完全n叉樹,排列樹,但是我們編碼的時候,連樹、結點的影子都沒看到。
回溯法樹隱藏在遞歸里,遞歸就是一棵樹,限界分支法我們大部分看到的例子是使用第一種方案,程序只要保持持續更新最優值和路徑path數組,路徑path數組記錄了每一步的選擇,相當于只是把結點里的當前的選擇和parent,拿出來單獨更新了,拿出來更新的代價是,每一個加入到隊列的結點都要更新path數組,好處是可以很簡單的判斷那些解已經走過了,那些沒有走過
總結
以上是生活随笔為你收集整理的限界分支法优先级队列方式出口和追踪解的两种方法总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 货郎问题:回溯法和限界分支法
- 下一篇: 分支限界发:Dijkstra算法