動態規劃走樓梯 分治 動態規劃 回溯 貪心一鍋燉

2021-10-16 11:03:55 字數 3031 閱讀 9782

「觀感度:五顆星」

「口味:東北一鍋出」

本文已收錄在githubgithub.com/geekhyt,感謝star。
初學者一聽到演算法思想,就會覺得它們高深莫測,只能望而卻步。

但如果你看過《事實》這本書,你就不會被大腦中的慣性思維所影響。 只要我們理解演算法思想的關鍵點,多做題練習並加深理解記憶。其實演算法思想就像切菜一樣簡單。

還看過的同學建議先移步這篇專欄你真的懂遞迴嗎?

比如本文講到的這幾種演算法思想,大部分都是基於遞迴思想基礎上的。

分治:分而治之,先解決子問題,再將子問題的解合併求出原問題。

貪心:一條路走到黑,選擇當下區域性最優的路線,沒有後悔藥。

回溯:一條路走到黑,手握後悔藥,可以無數次重來。(英雄聯盟艾克大招無冷卻)。

動態規劃:上帝視角,手握無數平行宇宙的歷史存檔,同時發展出無數個未來。

接下來我們一起庖丁解牛,將這幾種演算法思想一鍋燉。

分治演算法思想很大程度上是基於遞迴的,也比較適合用遞迴來實現。顧名思義,分而治之。一般分為以下三個過程:

比較經典的應用就是歸併排序 (merge sort)以及快速排序 (quick sort)等。我們來從歸併排序理解分治思想,歸併排序就是將待排序陣列不斷二分為規模更小的子問題處理,再將處理好的子問題合併起來。

上**。

const mergesort = function(arr)  else 

k++;

}// 檢查餘項

while(i < left.length)

while(j < right.length)

}return arr;

}

70. 爬樓梯

雖然動態規劃的最終版本 (降維再去維) 大都不是遞迴,但解題的過程還是離開不遞迴的。新手可能會覺得動態規劃思想接受起來比較難,確實,動態規劃求解問題的過程不太符合人類常規的思維方式,我們需要切換成機器思維。

使用動態規劃思想解題,首先要明確動態規劃的三要素。

切換機器思維,自底向上思考。

爬第 n 階樓梯的方法數量,等於兩部分之和:

子問題的最優解能夠推出原問題的優解。

dp[n] = dp[n-1] + dp[n-2]

具備三要素,確認邊界條件,初始化狀態,開始切菜:

const climbstairs = function(n) 

return dp[n];

};

在此基礎上,我們還可以通過壓縮空間來對演算法進行優化。因為dp[i]只與dp[i-1]dp[i-2]有關,沒有必要儲存所有出現過的 dp 項,只用兩個臨時變數去儲存這兩個狀態即可。

const climbstairs = function(n) 

return a2;

}

最近某音很火的貪心土味情話

喂,不是吧。今天喝了脈動啊,吃了果凍啊,但是,還是忍不住對你心動啊。

回到演算法中,貪心演算法動態規劃演算法的乙個子集,可以更高效解決一部分更特殊的問題。實際上,用貪心演算法解決問題的思路,並不總能給出最優解。因為它在每一步的決策中,選擇目前最優策略,不考慮全域性是不是最優。

leetcode 455. 分發餅乾

貪心演算法+雙指標求解。

將需求因子 g 和 s 分別從小到大進行排序,使用貪心思想配合雙指標,每個餅乾只嘗試一次,成功則換下乙個孩子來嘗試。

const findcontentchildren = function (g, s)  else 

}return res;

};

回溯演算法本質上就是列舉,使用摸著石頭過河的查詢策略,還可以通過剪枝少走冤枉路。leetcode 17.**號碼的字母組合

使用回溯法進行求解,回溯是一種通過窮舉所有可能情況來找到所有解的演算法。如果乙個候選解最後被發現並不是可行解,回溯演算法會捨棄它,並在前面的一些步驟做出一些修改,並重新嘗試找到可行解。究其本質,其實就是列舉。

如果沒有更多的數字需要被輸入,說明當前的組合已經產生。

如果還有數字需要被輸入:

在for迴圈中呼叫遞迴。

n+m 是輸入數字的總數

動態規劃走樓梯

main.cpp 動態規劃走樓梯 created by liujan on 11 18 14.問題描述 乙個樓梯有20級,每次走1級或2級,從底走到 頂一共有多少種走法?分析 假設從底走到第n級的走法有f n 種,走到第n級 有兩個方法,乙個是從第 n 1 級走1步,另乙個是從第 n 2 級走2步,...

2020 10 01 動態規劃 回溯

框架 初始化 base case dp 0 0 base 進行狀態轉移 for 狀態1 in 狀態1的所有取值 for 狀態2 in 狀態2的所有取值 for dp 狀態1 狀態2 求最值 選擇1,選擇2.509.斐波那契數 var fib function n return cur 322.零錢兌...

動態規劃走樓梯 室內樓梯款式大全

樓梯樣式普遍的有直梯 折梯 旋梯等。安全性為主的家中,能夠選擇直梯 折梯等傳統式構造,樓梯正下方空間樣子標準可作收納整理之作 考慮到裝飾藝術 時尚潮流感的家中則能夠選擇轉動樓梯,梯步還可以應用更美觀大方的夾層玻璃梯步。下面詳解一下。1.螺旋狀 180度的螺旋狀樓梯是一種能真實節約空間的樓梯修建方法,...