一:
動態規劃和貪心演算法都是一種遞推演算法,均有區域性最優解來推導全域性最優解
二:貪心最經典的例子是找錢問題,某國錢幣包含1、3、4元,如果要找6元,如何找錢會找的最少?
貪心的思想是每次都拿最大的,先拿4元,再拿乙個1元,再拿乙個1元,一共是三張。每次都拿最大的就是貪心,但實際上,只需要兩張三元是最優解
所以說貪心演算法不一定能得到最優解,貪心必須在一定條件下得到的才是最優解,比如我國錢幣,1、5、10元,大家平時找錢使用貪心法就是最優解。
三:貪心的做法是自頂向下的,而動態規劃的解法是自底向上的。
比如還是找錢問題,動態規劃的求解就是找一元如何找的最少,找兩元如何找的最少,找三元如何找的最少,並且每次算當前找的最少的錢都使用了之前計算的各自的最優解,從之前所有子集的最優解中找到最優解。
同時由於每次都記錄了每個子問題的最優解,不用每次都重新求子問題的最優解,而是直接使用,就會比暴力解法快很多。
四:(1)、貪心演算法是動態規劃的一種特例,貪心演算法能解決的問題動態規劃一定能解決。動態規劃能解決的問題,貪心不一定能夠解決。
(2)、貪心的複雜度低,動態規劃的複雜度高
五:求最優解的問題,從根本上說是一種對解空間的遍歷。
貪心和動態規劃本質上是對子問題樹的一種修剪。兩種演算法要求問題都具有的乙個性質就是「子問題最優性」。即,組成最優解的每乙個子問題的解,對於這個子問題本身肯定也是最優的。如果以自頂向下的方向看問題樹(原問題作根),則我們每次只需要向下遍歷代表最優解的子樹就可以保證會得到整體的最優解。形象一點說,可以簡單的用乙個值(最優值)代表整個子樹,而不用去求出這個子樹所可能代表的所有值。
動態規劃方法代表了這一類問題的一般解法。我們自底向上(從葉子向根)構造子問題的解,對每乙個子樹的根,求出下面每乙個葉子的值,並且以其中的最優值作為自身的值,其它的值捨棄。動態規劃的代價就取決於可選擇的數目(樹的叉數)和子問題的的數目(樹的節點數,或者是樹的高度)。
貪心演算法是動態規劃方法的乙個特例。貪心特在,可以證明,每乙個子樹的根的值不取決於下面葉子的值,而只取決於當前問題的狀況。換句話說,不需要知道乙個節點所有子樹的情況,就可以求出這個節點的值。通常這個值都是對於當前的問題情況下,顯而易見的「最優」情況。因此用「貪心」來描述這個演算法的本質。由於貪心演算法的這個特性,它對解空間樹的遍歷不需要自底向上,而只需要自根開始,選擇最優的路,一直走到底就可以了。這樣,與動態規劃相比,它的代價只取決於子問題的數目,而選擇數目總為1。
ACM 學習總結報告(三)
因為還沒有學習新的知識,所以這次先不進行知識點總結了,於是想寫一些隨筆來談談這段時間做題的感悟體會吧。一 貪心演算法例題分析 做了幾個貪心演算法的題後發現這些題都大同小異,基本上都是先定義乙個結構體,把所包括的元素都放進去。然後定義乙個排序函式,根據題目要求進行排序,最後再在主函式中貪心。做的多了不...
ACM 學習總結報告(十)
遞迴演算法的含義 程式直接或間接呼叫自身的程式設計技巧稱為遞迴演算法。直接或間接呼叫自身的函式稱為遞迴函式。它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解。遞迴的基本思想 問題分解 把乙個不能或不好解決的大問題轉化為乙個或幾個小問題,再把這些小問題進一步分解成更小的小問題...
ACM 學習總結報告(十三)
簡單定義 在乙個單調有序的集合中查詢元素,每次將集合分為左右兩部分,判斷解在哪個部分中並調整集合上下界,重複直到找到目標元素。時間複雜度 o logn 優於直接順序查詢o n 查詢連續函式的寫法 x 待查詢的值,caculate 所要查詢的函式,在這裡單調遞增 需保證查詢的值在區間範圍內 doubl...