貪心演算法概念
跟dp想法差不多(其實很有差別,要好好區別,新手想法),在當前做出最好的選擇。也就是說,不從整體上考慮,他所做出的近視某種意義上的區域性最優解。
又是具有無後效性,即某個狀態以後的過程不會影響以前的狀態,只與當前狀態有關。
一定要仔細分析其是否滿足無後效性。
思路:
區域性最優策略能導致產生全域性最優解。
1.建立數學模型來描述問題。
2.把求解的問題分成若干個子問題。
3.對每一子問題求解,得到子問題的區域性最優解。
4.把子問題的解區域性最優解合成原來解問題的乙個解。
貪心法的基本思路:
——從問題的某乙個初始解出發逐步逼近給定的目標,以盡可能快的地求得更好的解。當達到某演算法中的某一步不能再繼續前進時,演算法停止。
該演算法存在問題:
1. 不能保證求得的最後解是最佳的;
2. 不能用來求最大或最小解問題;
3. 只能求滿足某些約束條件的可行解的範圍。
求解:去逼近目標,每一步都是最優解,最終得到最優解的集合,
停止:不能再繼續前進。最優解得出不是最佳(這個似乎很簡單啊),最大最小解問題不行(什麼是最大最小解),只能求滿足某些約束條件的可行解
貪心策略一旦經過證明成立後,它就是一種高效的演算法。
先得知道什麼時候才能用它
三:貪心演算法適用的問題(
前提)
(
實際上,貪心演算法適用的情況很少。)
貪心演算法的證明圍繞著:整個問題的最優解一定由在貪心策略中存在的子問題的最優解得來的。
四:
框架
從問題的某一初始解出發;
while
(朝著給定的總目標前進一步)
有所有解元素組合成問題的乙個可行解;
問題:如何判斷是否可以用貪心;
嚴格的證明
可使用
有反例就是
不能用
貪心演算法的乙個充分必要條件:矩陣胚擬理論
貪心例子:(
nice
啊)hdoj1257
:最少攔截系統
一句話:找比我小的,
ok,到我這裡來,我給你名利,這是你應該是比我小,你要比我最小的大,滾。
**實現
:#include
int a[1000010];
int s[1000010];
int main()
}if(flag!=1)
}printf("%d\n",k+1);
}return 0;
}一題a掉突然也就懂一點點貪心(真是一點點,貪心決策的證明然後在使用太難了,是的,太難了,不過隨著做的題目多了應該會有感覺的,現在就是感覺暴漲啊)哈哈哈
感覺就是,貪心的決策不虛,有底氣,很強悍(我是指每次對於目標的選擇都有解決的方法,要麼被我吃了,要麼獨立一派),所以就會產生目標的集合,有很多個集合,然後就可以算出集合的數目了。。。只能算出數目麼?我能算集合元素麼,比如揹包問題,比如課程安排問題,比如裝箱問題,ok接來幾天,練習貪心題目,和想出這些問題的答案。
貪心解題心得
貪心解題心得 上星期做了幾道貪心的題目,對貪心演算法有了一定的了解,下面介紹一下自己的理解以及做題中遇到的問題以及一些需要注意的地方。貪心演算法主要用於求最優解的問題,由區域性最優解推到全域性最優解,是解決問題的首選演算法,但只能解決一小部分問題,應用範圍受限。揹包問題 揹包問題分為兩類,一類是0 ...
貪心演算法題解心得
通過vj上的題目,發現很多題目都是類似的,有的題目也可以用之前的思路來考慮 暴力求解的思路 但是這樣的話只能過樣例,會超時,這也就是為什麼使用貪心的原因吧,要考慮分步求解,求最優解。覺得做貪心問題最重要的還是想解決問題的方法,一般知道如何解決問題就做對了一半,然而這解決問題的方法有的時候並不太好想,...
演算法 貪心(1)
今天實驗做的是貪心演算法,中午睡醒然後爬了九樓去實驗室,討厭,老師沒有提前發實驗指導書剛開始還是討厭的,因為以前都是提前做好直接過來驗收的,畢竟對自己還是很沒有信心能夠在實驗課上完成實驗的 哎,事實證明確實沒有完成,思路想法都是有的,就是不會用高階語言實現了,難受難受 說正事吧,貪心演算法,就是目光...