什麼是貪心演算法?
貪心演算法從步步最優,到達全域性最優。
什麼時候能夠使用貪心演算法?
一般來說,凡是經過數學歸納法證明可以採用貪心法的情況都應該採用它,因為它具有高效性。
通常還有另外乙個方法來判斷,如果乙個問題具有這兩大性質,那麼使用貪心法來對其求解總能求
得最優解。
(1)最優子結構性質
當乙個問題的最優解一定包含其子問題的最優解時,稱此問題具有最優子結構性質。如何理解?換句話說:最優解一定是子問題的最優解組合而成的。沒有這條性質,求出的最優解一定不是最優解,所以這才是重中之重。這也是動態規劃問題的基石。
(2)貪心選擇性質
貪心選擇性質時指所求問題的整體最優解可以通過一系列區域性最優的選擇獲得,即通過一系列的逐步區域性最優選擇使得問題最終的選擇方案是全域性最優的。
演算法描述:
每次都把當前油量與下一目的地路程比較,若夠油則continue,若不夠則加滿油再比較一次,若夠則行駛,若不夠則break,達不到下一目的地。
演算法時間及空間複雜度分析:
時間複雜度:乙個迴圈,每次都是比較,所以時間複雜度為o(n);
空間複雜度:只定義了乙個bool變數,此外沒有另外開闢空間,所以空間複雜度為o(1);
總體來說,貪心演算法相比於前兩章的演算法來說,是屬於簡單一點的知識。只需要把腦海中的演練一遍, 你認為對就基本上是對的。不過,需要善於思考,並且要有不同的切入點,不然很容易鑽牛角尖。當你的演算法得出錯誤的結果的時候,就應改思考這個演算法是不是錯誤的,可以嘗試舉反例。
有大佬帶隊,自己都不用debug了。不過在結伴過程中我也學到了很多我沒有學到的東西,總的來說是很好的。
參考:
演算法第四章作業
1.我對貪心演算法的理解 貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態...
演算法第四章作業
一 對貪心演算法的理解 貪心演算法的基本要素是 貪心選擇性質和最優子結構性質 貪心選擇每次選取當前最優解,可以依賴以往的選擇,但絕不依賴於將來所做的選擇,也不依賴於子問題的解。貪心演算法通常以自頂向下的方式進行。二 汽車加油問題的貪心選擇性質 汽車應選擇在能到達的前提下離自己最遠的加油站進行加油 i...
演算法第四章作業
我的理解 主要是在貪心二字上面,但是重要的是在哪些方面上貪心,是解決題目的最重要的思路。因此要考慮貪心選擇性質和子結構性質 貪心選擇性質 從區域性的最優解擴充套件到整體的最優解 最優子結構性質 整體的最優解包含子問題的最優解 由於要計算汽車從起點到終點的最少加油次數 故,每次可以盡可能多的在滿油量內...