貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。
貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態,只與當前狀態有關。
什麼是貪心演算法呢?貪心演算法可以認為是動態規劃演算法的乙個特例,相比動態規劃,使用貪心演算法需要滿足更多的條件(貪心選擇性質),但是效率比動態規劃要高。
比如說乙個演算法問題使用暴力解法需要指數級時間,如果能使用動態規劃消除重疊子問題,就可以降到多項式級別的時間,如果滿足貪心選擇性質,那麼可以進一步降低時間複雜度,達到線性級別的。
什麼是貪心選擇性質呢,簡單說就是:每一步都做出乙個區域性最優的選擇,最終的結果就是全域性最優。注意哦,這是一種特殊性質,其實只有一部分問題擁有這個性質。
比如你面前放著 100 張人民幣,你只能拿十張,怎麼才能拿最多的面額?顯然每次選擇剩下鈔票中面值最大的一張,最後你的選擇一定是最優的。
然而,大部分問題明顯不具有貪心選擇性質。比如打鬥地主,對手出對兒三,按照貪心策略,你應該出盡可能小的牌剛好壓制住對方,但現實情況我們甚至可能會出王炸。這種情況就不能用貪心演算法,而得使用動態規劃解決,
在電腦科學中,分治法是構建基於多項分支遞迴的一種很重要的演算法正規化。字面上的解釋是「分而治之」,就是把乙個複雜的問題分成兩個或更多的相同或相似的子問題,直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。
分治演算法,可以認為是一種演算法思想,通過將原問題分解成小規模的子問題,然後根據子問題的結果構造出原問題的答案。這裡有點類似動態規劃,所以說運用分治演算法也需要滿足一些條件,你的原問題結果應該可以通過合併子問題結果來計算。
演算法知識點彙總
1.求陣列元素之間相鄰的元素個數或者求字串的長度 指向同乙個陣列的不同元素的兩個指標可以相減,其差便是兩個指標之間相隔的元素個數。例如在乙個字串中,讓乙個指向該串的首元素,讓另乙個指向字串的結束符,兩個指標相減,其差便是字串的長度 2.怎樣判斷兩個指標指向的是陣列的同乙個元素?指標可以互相比較。如指...
《啊哈!演算法》知識點彙總
這個知識點總結是朋友的讀書筆記,寫完之後扔給了我,發出來給其他人看看,希望更多的人能知道這本書,擺脫對演算法的陌生和畏懼感,也給我帶來點流量 感謝柏詩峰同學的支援 這份導圖總結自 啊哈!演算法 這本書,但有不僅僅是總結,更標註了許多頁碼的索引,可以在想要回看知識點時快速的找到對應的章節。書裡的演算法...
小知識點彙總
1 為什麼乙個數的各位數之和可以被3整除時,這個數就可以被3整除 設乙個n位數number,從個位起每一位為a1 an 則number a1 a2 10 a3 10 2 an 10 n 1 1 先證必要性 如果number的各位數之和是3的倍數,則a1 a2 an 3k k為正整數 2 由 2 得a...