贪心算法与动态规划的区别与联系
目錄
?
1.定義
1.1貪心算法
1.1.1解題步驟
1.2動態(tài)規(guī)劃
1.2.1解題步驟
2.聯系
3.區(qū)別
1.定義
1.1貪心算法
貪心算法是指在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優(yōu)上加以考慮,只做出在某種意義上的局部最優(yōu)解。貪心算法不是對所有問題都能得到整體最優(yōu)解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無后效性,即某個狀態(tài)以前的過程不會影響以后的狀態(tài),只與當前狀態(tài)有關。
1.1.1解題步驟
? ? ? 1.建立數學模型來描述問題;
? ? ? 2.把求解的問題分成若干個子問題;
? ? ? 3.對每一子問題求解,得到子問題的局部最優(yōu)解;
? ? ? 4.把子問題的局部最優(yōu)解合成原來問題的一個解
1.2動態(tài)規(guī)劃
動態(tài)規(guī)劃是運籌學的一個分支,是求解決策過程的最優(yōu)化的數學方法。20世紀50年代初美國數學家R.E.Bellman等人在研究多階段決策過程的優(yōu)化問題時,提出了著名的最優(yōu)化原理,把多階段過程轉化為一系列單階段問題,利用各階段之間的關系,逐個求解,創(chuàng)立了解決這類過程優(yōu)化問題的新方法——動態(tài)規(guī)劃。在各種算法中,我認為動態(tài)規(guī)劃是較難掌握好的,主要難在模型的建立。
?
1.2.1解題步驟
? ? ? 1.找出最優(yōu)解的性質,刻畫其結構特征和最優(yōu)子結構特征;
? ? ? 2.遞歸地定義最優(yōu)值,刻畫原問題解與子問題解間的關系;
? ? ? 3.以自底向上的方式計算出各個子問題、原問題的最優(yōu)值,并避免子問題的重復計算;
? ? ? 4.根據計算最優(yōu)值時得到的信息,構造最優(yōu)解。
2.聯系
都是一種推導算法
都是分解成子問題來求解,都需要具有最優(yōu)子結構
3.區(qū)別
1.貪心:每一步的最優(yōu)解一定包含上一步的最優(yōu)解,上一步之前的最優(yōu)解則不作保留。動態(tài)規(guī)劃:全局最優(yōu)解中一定包含某個局部最優(yōu)解,但不一定包含前一個局部最優(yōu)解,因此需要記錄之前的所有的局部最優(yōu)解
2.貪心:如果把所有的子問題看成一棵樹的話,貪心從根出發(fā),每次向下遍歷最優(yōu)子樹即可(通常這個“最優(yōu)”都是基于當前情況下顯而易見的“最優(yōu)”);這樣的話,就不需要知道一個節(jié)點的所有子樹情況,于是構不成一棵完整的樹。動態(tài)規(guī)劃:動態(tài)規(guī)劃則自底向上,從葉子向根,構造子問題的解,對每一個子樹的根,求出下面每一個葉子的值,最后得到一棵完整的樹,并且最終選擇其中的最優(yōu)值作為自身的值,得到答案
?
在找資料過程中發(fā)現了一名大佬博主:https://blog.csdn.net/qq_32400847/article/details/51148917
是關于學算法的,內容很豐富和詳細,剛開始學算法或者想了解的可以看一下。
?
總結
以上是生活随笔為你收集整理的贪心算法与动态规划的区别与联系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 选择问题(求第k个最小元素)
- 下一篇: find 命令入门