概念看不懂是正常的,看懂了才不正常。有個小建議:先看一下概念,看完之後肯定感覺似懂非懂,沒關係去做題實踐出真知,每個型別做個8、9題,在回過頭來看概念會發現概念說的好像真是那麼回事兒,接著再去做題反覆練習就明白了。
最優子結構:原問題的解包含子問題的解。(子問題即規模更小的問題)
例如,a--b--c,ab = 3,bc = 4,求a到c的最短距離。
顯然答案是ab+ac = 7;ab的最短距離呢,等於3。
這就是原問題的解包含了子問題的解。
分治法思想:將原問題分解為若干個子問題,求解每個子問題,從而得到原問題的解。
子問題可以重疊也可以不重疊。
重疊舉例:斐波那契數列
f(n) = f(n-1) + f(n-2)
f(n-1) = f(n-2) + f(n-3)
f(n-2) = f(n-3) + f(n-4)
可見f(n-1)與f(n-2)都是f(n)的子問題,但是在求解f(n-1)與f(n-2)的過程中都會求解f(n-3),這就是重疊子問題。
對於重疊子問題,我們一般採用動態規劃來做,不是說分治法做不了,分治法有很多的重複計算,因此動態規劃的效率高。
不重疊子問題舉例:241. 為運算表示式設計優先順序
先求運算子左右兩邊表示式的值,合併求原表示式的值,左表示式與右表示式顯然是沒有重疊部分的。
分治法的應用場景:具有最優子結構,但子問題不重疊的問題。
動態規劃思想:問題具有最優子結構,記錄每乙個子問題的解,求解原問題就利用這些記錄解。
可見動態規劃擅長解決子問題重疊的問題,記錄了子問題的解,避免了重複計算。但這並不是說動態規劃不可以解決不重疊子問題,只是在解決不重疊子問題是不具有任何的優勢。
動態規劃應用場景:具有最優子結構,子問題重疊的二三維最值問題。
貪心思想:每一步選擇對當前來說最好的選擇,及貪心選擇。但是每一步最優並代表全域性最優。所以使用貪心演算法要證明得到的結果是全域性最優解。因此這也限制了貪心思想的應用範圍。貪心思想要滿足兩個條件:其
一、貪心選擇可以得到全域性最優解;其二,最優子結構。
貪心思想應用場景:最優子結構,滿足貪心策略的一維最值問題。
總結:由此可見動態規劃功能強大,只要滿足最優子結構,它都能夠解決只是效率問題而已,所以要重點理解掌握動態規劃。
貪心習題小總結
分治法小結
動態規劃小結
貪心 分治 與 動規 異同點分析
兩個概念 重疊子問題 如果乙個問題可以被分為若干個子問題,且這些子問題會重複出現,那麼就稱這個問題擁有重疊子問題 最優子結構 如果乙個問題的最優解可以由其子問題的最優解有效地構造出來,那麼稱這個問題擁有最優子結構 三者各自特點 分治 分而治之 將原問題劃分成若干個規模較小而結構與原問題相同或相似的子...
貪心和動規的difference
很多同學在做動規題的時候,很容易做成貪心,的確,動規和貪心是很相近的,在很多時候,動規和貪心沒有明顯的界限,反而在很多時候,我們需要使用貪心的思想,對動規進行優化,不過這也就導致了很多同學分不清什麼題是動規,什麼題是貪心。現在我們來回憶一下,動規的思想是什麼,以前乙個或者多個狀態的最優值,加上現在這...
Employment Planning 動規小練
employment planning 原題鏈結 對於當前月份所需人數,和僱傭最大所需人數之間的情況進行討論。由於解雇金額和僱傭金額的存在,會存在一次性僱傭更多的人以減少解雇金額的情況,所以要討論到所需最大人數。include include include include include incl...