引言
當你企圖使用計算機解決一個算法問題時,你其實就是再思考如何將這個問題表示爲狀態(用哪些遍歷存儲哪些數據)以及如何在狀態中轉義(怎樣根據一些變量計算出另一些變量)。所以所謂的空間複雜度就是爲了支持你的計算所必須存儲的狀態最多都多少,所謂的時間複雜度就是從初始狀態到達最終狀態中間需要多少步。
總結
一個問題是該用遞推、貪心、搜索還是動態規劃,完全是有這個問題本身階段間狀態的轉移方式決定的!
- 每個階段只有一個狀態-----遞推
- 每個階段的最優狀態都是由上一個階段的最優狀態得到—貪心
- 每個階段的最優狀態都是由之前所有階段的狀態的組合得到–搜索
- 每個階段的最優狀態可以從之前某個階段的某個或某些狀態直接得到而不管之前這個狀態是如何得到——動態規劃。
每個階段的最優狀態可以從之前某個階段的某個或某些狀態直接得到,這個性質叫做最優子結構,不管之前這個狀態是如何得到。