日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么是动态规划?

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是动态规划? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是動態規劃?

斐波那契數列 Fibonacci Sequence

F(0) = 1,F(1) = 1,F(n) =F(n-1) + F(n-2)

int fib (int n) {if (n == 0) {return 0;}if (n == 1) {return 1;}return fib(n-1) + fib(n-2); }

fib(10) = 55 time : 4 e-06 s

fib(20) = 6765 time : 0.000104 s run function fib() 21891 times

fib(40) = 102334155 time : 1.28333 s run function fib() 331160281 times

fib(42) = 267914296 time : 3.47917 s

指數級別的復雜度,O(2^n)

遞歸樹

在遞歸樹中進行了大量的重復計算,run function fib(20) 21891 times;run function fib(40) 331160281 times

記憶化搜索

自上而下的解決問題,利用一個 memo 存放已經計算的結果

vector<int> memo;int fib (int n) {if (n == 0) {return 0;}if (n == 1) {return 1;}if (memo[n] == -1) {memo[n] = fib(n-1) + fib(n-2);}return memo[n]; }

fib(40) = 102334155 time: 5e-06 s run function fib() 79 times.

fib(1000) = 1556111435 time : 6.5e-05 s run function fib() 1999 times.

(fib(1000) = 1556111435 這個值是錯誤的,超出了int整數的溢出值)

函數被調用的次數的 2^(n-1)

算法復雜度,O(n) 級別

動態規劃

自下而上的解決問題

int fib (int n) {vector<int> memo(n+1, -1);nemo[0] = 0;memo[1] = 1; for (int i = 2; i <= n; i++) {memo[i] = memo[i-1] + memo[i-2];}return memo[n]; }

時間復雜度,O(n)

fib(1000) = 1556111435(錯誤) time : 6e-05 s

dynamic programming(also known as dynamic optimization)is a method for solving a complex problem by breaking it down into a collection of simple subproblems,solving each of those subproblems just once,and storing their solutions -ideally,using a memory-based data structure.

將原問題拆解成若干子問題,同時保存子問題的答案,使得每個子問題只求解一次,最終獲得原問題的答案。

總結

以上是生活随笔為你收集整理的什么是动态规划?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。