簡體   English   中英

自上而下DP的自下而上DP

[英]Bottom Up DP from Top Down DP

我在想是否有一些將自上而下的動態編程轉換為自下而上編程的通用方法。

我們能否想出一些機制,它給出了自上而下的DP可以轉換為自下而上DP的正式方式。

注意 :我是動態編程的初學者,我所看到的幾個問題,其中自頂向下方法轉換為自下而上的方法是非常不同的。 所以我不確定是否可以采用通用方法。

通過概括我的意思是,應該如何初始化數組,應該是數組的大小以及數組應該具有多少維度。

可以將動態程序的執行視為有向非循環圖,其中每個頂點是子問題,並且弧表示需要針對特定​​子問題的解來計算另一個子問題的解。 具有memoization的自上而下的遞歸程序實際上是通過深度優先搜索從拓撲中對從根問題可到達的圖形的子圖進行拓撲排序。 要將其轉換為自下而上的方法,您需要自己制定合適的拓撲順序,這些順序因問題而異。

自上而下的解決方案通常更好,因為它只解決了必要的子問題。 將自下而上的解決方案轉換為自上而下是非常簡單的,您只需按需計算和存儲子問題,而不是預先計算所有子問題。 另一種方法可能很棘手,因為您需要知道要解決的子問題。 根據問題,在不檢查上層問題的情況下找到子問題的難度可以從容易到不可能。 例如,請考慮以下內容:您有一個無限彩色的加權圖,其頂點用10種顏色着色。 距離給定A Verticle最近的藍色垂直的距離是什么。 可以向上解決它,但是自下而上是不可能的,因為你需要從圖的所有藍色頂點開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM