【572→算法】算法思想精髓

1本質

1)算法和人做事最核心的差異是對明確性的要求不同,算法對明確性有着極其嚴苛的要求。

2)算法的優勢在於模型化,模型化讓算法能在不同領域之間快速遷移。

3)算法本身沒有好壞,背後體現的都是人的思想。

2複雜度

1)時間複雜度是工具,可以衡量、比較不同算法的效率。

2)時間複雜度也是一種指標,能夠督促算法工程師不斷改進算法,降低複雜度,提高效率。

3)想要降低時間複雜度,我們可以用“空間換時間”和“分治”的辦法。

3啓發

1)成功地建立貼近現實的模型,同時保持問題的可解性,是評價數學模型巧妙的一個重要角度。

2)很多問題輸入規模大到計算機也沒法處理。這時我們需要謹慎地取捨,把問題規模降低到算法可以處理的範圍。

3)算法經常採用迭代的方法逐步逼近問題答案。如何保證收斂和收斂效率體現了算法設計時的巧妙。

4反思

1)算法不能對問題負責。算法是工具,就像手裏的錘子,錘子能釘釘子,但錘子不知道釘釘子要解決什麼問題。

2)算法不能對數據負責。如果數據就是垃圾,算法再好用也白搭。

3)算法不能對解釋負責。算法科學家有事寧可放棄一定的準確性,也會去選擇那些更容易被解釋和接受的算法。

5算法藍圖

算法解決問題的基本藍圖:

1)明確問題,不明確問題會導致在算法設計中走很多不必要的彎路。

2)建立模型,數學模型是對現實問題的近似和抽象,能夠建立起計算機算法和問題之間的橋樑,爲算法的效果進行預先估計。

3)選擇算法,達成目標的好壞和時間複雜度決定了算法的選擇。

6建立模型

1)建模就是把複雜的現實問題,轉化成數學語言的過程。

2)算法工程師會遵循三個步驟,不斷迭代找出最合適的模型:

第一,確定假設,找到核心變量和關係,捨棄不重要的細節,把模糊的問題,明確化、定量化。

第二,驗證模型,不斷和現實問題做比較,驗證模型是否足夠貼合現實問題。

第三,權衡可行性,找到一個又能準確描述現實,又能有效求解的模型。

7算法選擇

1)我們強調了算法和模型不是一一對應的關係,建模不等於就可以完成算法選擇。

2)在選擇算法的時候,最重要的就是對質量和效率兩個關鍵指標的權衡。

3)更進一步,優秀的算法工程師還會考慮數據對算法的影響,更加偏好那些數據敏感度低,限制條件少,對數據依賴小的算法。

8迭代

1)迭代,是一步一步重複某個固定操作,逐步接近答案的策略。

2)迭代算法能有效運行,有兩個條件必須滿足:一個是算法必須收斂,一個是不動點必須唯一。

3)迭代算法的運算速度快,是因爲它放棄了一點點解決問題的質量,換來了大幅的速度提升。

9分治

1)分治算法是通過回溯,不斷分解同樣的問題,直到問題小得可以直接解決,再把小問題的解合併成原來問題解的算法策略。

2)確保要解決的問題能分解成與原問題類似的子問題,並且這些子問題之間相互獨立,這時分治策略才能奏效。

3)如果分解問題和合並結果計算不復雜,分治策略能減小算法的複雜度。

4)分治策略開啓了並行計算的大門,利用多CPU硬件上的優勢,可以減少算法的運行時間。

10動態規劃

1)動態規劃指的既是多步驟的決策優化問題,也是解決這類問題的算法方法。

2)動態規劃算法是在多步驟的決策優化問題滿足最優子結構的時候,用以終爲始、以小建大的方向解決問題的算法策略。

3)動態規劃的效率會受“維度爆炸”的影響。

11分支界定

1)組合優化是一類特別難解決的問題,它的搜索空間大,我們很難確定誰是最優解。

2)分支定界法是把分支、定界、剪枝三個過程結合在一起,減小搜索空間,保證找到組合優化問題最優解的算法策略。

3)要讓分支定界法高效,從根本上是要進行有效的剪枝。爲了進一步提升分支定界法的效率,我們可以使用提前停止的策略。

12啓發式

1)遇到特別複雜的組合優化問題時,如果找不到最優解,我們可以轉而使用啓發式算法,找到不錯的可行解。

2)啓發式算法是人們通過對問題的理解,以某一套規則制定出來的一類算法。

3)元啓發式算法是通過人們對自然或者人類解決問題時通用邏輯的觀察和模擬,總結出來的一系列通用啓發式算法。

13蒙特卡羅

1)對問題中的隨機事件進行取樣,爲有限個樣本進行獨立計算,最後把每個樣本結果進行統計的策略叫蒙特卡羅方法。

2)蒙特卡羅方法最適用於隨機變量多,計算邏輯複雜的問題。

3)隨機模擬不是萬能的。它會佔用大量計算資源,依賴於參數的正確性,並且對揭示問題本質沒有太大幫助。

14機器學習

1)機器學習算法是一系列讓計算機自主學習的算法。它們最適合用在人類沒法用明確規則進行解決的問題上。

2)機器學習學到了很多人類沒教過、自己也不懂的事物細節。

3)機器學習學到的是事物之間的複雜關係。

15學習策略

1)機器學習模擬了不同的學習模式,學習模式不同,學到的知識也不一樣,但也許能解決的問題是一致的。

2)機器學習得到的知識傳回給人類並不容易,但又很必要,我們還在探索更好的傳回的方法。

16算法思維

1)很多人關注的是眼下問題的特定結果,而算法工程師更在意通用方案,解決更多更廣泛的問題。

2)學會拿數據和算法工程師溝通。數據越多,質量越高,算法工程師對你要解決問題的興趣也越高。

3)和算法工程師最好的互動方式,就是一起在抽象模型和現實場景當中來回轉換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章