貪心算法-極易理解篇


參考鏈接:https://zhuanlan.zhihu.com/p/76164082?ivk_sa=1024320u,非常棒!!!

圖片前引:

                            

                         

 

 假設一個問題比較復雜,暫時找不到全局最優解,那么我們可以考慮把原問題拆成幾個小問題(分而治之思想),分別求每個小問題的最優解,再把這些“局部最優解”疊起來,就“當作”整個問題的最優解了。

                            

 

貪心算法的三步走!

  第一步:明確到底什么是最優解?明確下來之后用小本本記下來!

       第二步:明確什么是子問題的最優解?再用小本本記下來!

       第三步:分別求出子問題的最優解再堆疊出全局最優解?這步不用記!

        就是這么簡單!

 

示例:0-1背包問題

有一個背包,最多能承載150斤的重量,現在有7個物品,重量分別為[35, 30, 60, 50, 40, 10, 25],它們的價值分別為[10, 40, 30, 50, 35, 40, 30],,阿廣,如果是你的話,應該如何選擇才能使得我們的背包背走最多價值的物品?

按照剛才說的步驟實操一下吧!

第一步,明確到底什么是最優解?

                           

第二步,明確什么是子問題的最優解?再用小本本記下來!

                               

第三步,分別求出子問題的最優解再堆疊出全局最優解?

按照制訂的規則(價值)進行計算,順序是:4 2 6 5 。

最終的總重量是:130。

最終的總價值是:165。

 

                            

按照制訂的規則(重量)進行計算,順序是:6 7 2 1 5 。

最終的總重量是:140。

最終的總價值是:155。

可以看到,重量優先是沒有價值優先的策略更好。

 

                           

按照制訂的規則(單位密度)進行計算,順序是:6 2 7 4 1。

最終的總重量是:150。

最終的總價值是:170。

可以看到,單位密度這個策略比之前的價值策略和重量策略都要好。

                  

貪心算法三個核心問題!!!

          

是的,阿廣,你說的基本意思正確!

下面我總結一下使用貪心算法的前提:

1、原問題復雜度過高;

2、求全局最優解的數學模型難以建立;

3、求全局最優解的計算量過大;

4、沒有太大必要一定要求出全局最優解,“比較優”就可以。

那么幾乎99.99999999999%就要使用貪心算法的思想來解決問題。

                    

按串行任務分:時間串行的任務,按子任務來分解,即每一步都是在前一步的基礎上再選擇當前的最優解。

按規模遞減分:規模較大的復雜問題,可以借助遞歸思想(見第2課),分解成一個規模小一點點的問題,循環解決,當最后一步的求解完成后就得到了所謂的“全局最優解”。

按並行任務分:這種問題的任務不分先后,可能是並行的,可以分別求解后,再按一定的規則(比如某種配比公式)將其組合后得到最終解。

 

                           

成本

耗費多少資源,花掉多少編程時間。

速度

計算量是否過大,計算速度能否滿足要求。

價值

得到了最優解與次優解是否真的有那么大的差別,還是說差別可以忽略。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM