1. 程式人生 > >《演算法筆記》9. 培養貪心思維、貪心演算法深度實踐

《演算法筆記》9. 培養貪心思維、貪心演算法深度實踐

[TOC] # 1 貪心演算法 ## 1.1 基本概念 1、最自然智慧的演算法 2、用一種區域性最功利的標準,總是能做出在當前看來是最好的選擇 3、難點在於證明區域性最優解最功利的標準可以得到全域性最優解 4、對於貪心演算法的學習主要是以增加閱歷和經驗為主 ### 1.2.1 貪心演算法解釋 正例:通過一個例子來解釋,假設一個數組中N個正數,第一個挑選出來的數乘以1,第二個挑選出來的數乘以2,同理,第N次挑選出來的數乘以N,總的加起來是我們的分數。怎麼挑選數字使我們達到最大分數? > 陣列按從小到大的順序排序,我們按順序依次挑選,最終結果就是最大的。本質思想是因子隨著挑選次數的增加會增大,我們儘量讓大數去結合大的因子。 ==貪心演算法有時是無效的,後面會貪心演算法無效的例子== ### 1.2.2 貪心演算法的證明問題 如何證明貪心演算法的有效性? > 一般來說,貪心演算法不推薦證明,很多時候證明是非常複雜的。通過下面例子來說明貪心演算法證明的複雜性,從頭到尾講一道利用貪心演算法求解的題目。 例子:給定一個由字串組成的陣列strs,必須把所有的字串拼接起來,返回所有可能的拼接結果中,字典序最小的結果。 > 字典序概念:直觀理解,兩個單詞放到字典中,從頭開始查詢這個單詞,哪個先被查詢到,哪個字典序小。 > 字典序嚴格定義,我們把字串當成k進位制的數,a-z當成26進位制的正數,字元長度一樣,abk>abc,那麼我們說abk的字典序更大。字元長度不一樣ac和b,那麼我們要把短的用0補齊,0小於a的accil,