簡體   English   中英

就時間復雜度而言,自下而上的 DP 解決方案是否優於自上而下?

[英]Is Bottom-up DP solution better than Top-down in terms of Time complexity?

是否存在自下而上解決方案比自上而下(記憶化)解決方案具有更好時間復雜度的動態規划問題?

你也許可以彌補一個,但通常不會。

當兩種解決方案都可用時,最壞情況的時間復雜度是相同的。

在最壞的情況下,自下而上的解決方案通常更快,絕對值(不是漸近復雜度),因為記憶是一項相對昂貴的操作。

在最佳或特殊情況下,自上而下的解決方案通常更快,因為它們僅評估每個問題實例所需的子問題。

DP 和 Memoization 都漸近地給出相同的時間復雜度。 然而,在運行時,DP 解決方案以某個恆定因素超過了記憶技術。
這是因為在 DP 的情況下,我們只需要在表中查看子問題的結果,而在 Memoization 的情況下,我們需要調用遞歸,然后它是否通過直接檢查哈希表/數組來返回結果(無論你使用什么)如果它已經計算或通過計算它,這反過來又會消耗更多的 CPU 周期。

在某些情況下,我們的子問題空間可能非常大,但我們並不需要所有子問題來得到我們的答案,記憶化可能是有利可圖的,因為它只解決了不可避免的問題而不是全部。 但是,這種情況很少發生,因為很多時候我們只優化我們的 DP 代碼,它不會對所有子問題進行迭代,而是只對所需的子問題進行迭代。

因此,一般來說,Bottom-Up 方法,即 DP 解決方案總是比其相應的 Memoization 解決方案運行得更快。

注意:我使用的是運行速度更快這個詞而不是時間復雜度,因為時間復雜度是漸近的,兩者都是相同的。

暫無
暫無

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

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