1. 程式人生 > >《趣學演算法演算法 思路彙總》

《趣學演算法演算法 思路彙總》

演算法的好壞標準 

  • 正確性:滿足問題的需求,執行正常,無語法錯誤, 
    通過軟體測試。
  • 易讀性:簡潔易懂,註釋語句恰當適量。
  • 健壯性:演算法對非法資料及操作有較好的反應和處理。
  • 高效性:演算法執行效率高,即演算法執行所消耗的時間短。
  • 低儲存性:低儲存性是指演算法所需要的儲存空間低。
  • 六字總結:高效率 低儲存

第二章 貪心演算法

一個貪心演算法總是做出當前最好的選擇,也就是說,它期望通過區域性最優選擇 

從而得到全域性最優的解決方案。 

—《演算法導論》 
- 貪心演算法求解兩個重要的特性 
(1)貪心選擇 每一步都作出當前的最佳(何為最佳,策略不同,情況不同)選擇 僅依賴於之前作出的選擇 
(2)最優子結構 問題的最優解包含其子問題的最優解 

- 貪心演算法祕籍 
(1)貪心策略 選擇當前看上去最好的一個方案 如最大的 最值錢的 最重的 
(2)區域性最優解 根據貪心策略,一步一步地得到區域性最優解 
(3)全域性最優解 所有的區域性最優解合成為原來問題的一個最優解 
- 如何定義最優子結構 
        分解問題模型 縮小問題的規模 
        最優解子問題的分解結構和堆疊方式 
        分解結構:每一步都在前一步的基礎上選擇當前最好的解(錢幣找零問題) 
        堆疊結構:分解成相對獨立的幾個子問題,最後進行合併(某種公式計演算法則) 
- 貪心演算法的缺陷 
         貪婪法每一步選擇完之後,區域性最優解就確定 

        不再進行回溯,之前選擇不再修改,直到演算法結束 
        貪心只有極少情況可以得到最優解 
         通常得到的是近似最優解,但是簡單高效 
        省去了為找最優解可能需要的窮舉操作 
- 貪心演算法的典型應用 
最優裝載問題       揹包問題       會議安排問題

第三章 分治法

  • 分治,顧名思義,分而治之。 

    大問題分解成一系列規模較小的相同問題,然後逐個解決小問題,即所謂的分而治之。分治法產生的子問題與原始問題相同,只是規模減小。

  • 分治法求解的三個條件 
    (1)原問題可分解為若干個規模較小的相同子問題。 分治 
    (2)子問題相互獨立。單個問題的解不會影響到下個問題。 
    (3)子問題的解可以合併為原問題的解。 歸併
  • 分治演算法祕籍 
    (1)分解:將要解決的問題分解為若干個規模較小、相互獨立、與原問題形式相同的子問題,確保各個子問題的解具有相同的子結構 
    (2)治理:求解各個子問題。由於各個子問題與原問題形式相同,只是規模較小而, 
    而當子問題劃分得足夠小時,就可以用較簡單的方法解決。 問題可以解決,直接解決,否則繼續用相同的規則接著分解。 
    (3)合併:按原問題的要求,將子問題的解逐層合併構成原問題的解。 
    分治法的實現模式可以是遞迴方式,也可以是非遞迴方式,
  • 應用分治法的目的 
    (1)通過分解問題,使無法著手解決的大問題變成容易解決的小問題 
    (2)通過減小問題的規模,降低解決問題的複雜度(或計算量)

  • 遞迴和分治聯絡 
    問題的分解肯定不是一步到位的,反覆呼叫,層層分解,自然導致了遞迴的呼叫。 
    分治法得到的子問題和原問題是相同的,當然可以用相同的函式來解決 
    區別只在於問題的規模和範圍不同,可以通過引數來控制範圍 
    遞迴同時也可以該用迴圈的方式,特別是尾遞迴(此部分後續會有單獨的分析)
  • 分治演算法的典型應用 
            二分搜尋技術    
     合併排序    快速排序  

第四章 動態規劃

動態規劃解決複雜問題的思路也是對問題進行分解,通過求解小規模的子問題再反推出原問題的結果。動態規劃也是把原問題分解為若干子問題,然後自底向上,先求解最小的子問題,把結果儲存在表格中,再求解大的子問題時, 直接從表格中查詢小的子問題的解, 避免重複計算, 從而提高演算法效率。 

- 動態規劃求解兩個特性 
(1)最優子結構 問題的最優解包含其子問題的最優解 
(2)子問題重疊 有大量的子問題是重複的,記錄結果,避免重複運算 

(3)無後向性 決策僅受之前決策的影響,不影響之後各階段的決策 

- 動態規劃祕籍 
(1)分析最優解的結構特徵。 
(2)建立最優值的遞迴式。(也可以稱為決策策略) 
(3)自底向上計算最優值,並記錄。 

(4)構造最優解。 

- 如何建立最優值的遞推式 
(1)定義最優子問題 確定問題的優化目標 
(2)定義狀態 決策的結果(狀態) 最終的結果(狀態)就是最終解 
(3)定義決策和狀態轉換方程 狀態遞增的表示式(不一定是數學表示式) 
(4)確定邊界條件 實際上就是遞迴終結條件,無需額外的計算
分析原問題最優解和子問題最優解的關係。考查有多少種選擇。得到最優解遞迴式。  
以上的理解請不要陷入細節,更多的理解請從實際的案例中體會。問題的重複求解是動態規劃提升的關鍵。
  • 動態規劃的典型應用 
            青蛙上臺階問題 
            棋盤格跳馬問題

  • 最長公共子序列     最大的子陣列之和    編輯距離    遊艇租賃  矩陣連乘      0-1揹包問題

第五章 回溯法

回溯法是一種選優搜尋法,按照選優條件深度優先搜尋,以達到目標。當搜尋到某一步 
時,發現原先選擇並不是最優或達不到目標,就退回一步重新選擇,這種走不通就退回再走 
的技術稱為回溯法 
回溯法是一種“ 能進則進,進不了則換,換不了則退”的搜尋方法。 
- 回溯法的演算法要素 
首先要確定解的形式,定義問題的解空間 
解空間:顧名思義,就是由所有可能解組成的空間。解空間越小,搜尋效率越高。 
一個問題的解空間通常由很多可能解組成,一定的組織結構搜尋最優解, 
如果把這種組織結構用樹形象地表達出來,就是解空間樹。 
這裡寫圖片描述 
隱約束指對能否得到問題的可行解或最優解做出的約束。如果不滿足隱約束, 
就說明得不到問題的可行解或最優解,那就沒必要再沿著該結點的分支進行搜尋了, 
相當於把這個分支剪掉了 
顯約束可以控制解空間大小,隱約束是在搜尋解空間過程中判定可行解或最優解的。 
- 回溯法解題祕籍 
(1)定義解空間 確定解空間包括解的組織形式和顯約束(範圍限定) 
(2)確定解空間的組織結構 通常用解空間樹形象的表達(只是輔助理解並不是真的樹) 
(3)搜尋解空間 按照深度優先搜尋,根據限制條件,搜尋問題的解 

- 回溯法的典型應用 

      0-1揹包問題      最大團(護衛隊) n皇后問題     地圖m著色問題     最優加工順序問題


相關推薦

演算法演算法 思路彙總

演算法的好壞標準 正確性:滿足問題的需求,執行正常,無語法錯誤, 通過軟體測試。易讀性:簡潔易懂,註釋語句恰當適量。健壯性:演算法對非法資料及操作有較好的反應和處理。高效性:演算法執行效率高,即演算法執

演算法》學習筆記(二) 哥德巴赫猜想

1. 什麼是哥德巴赫猜想 哥德巴赫1742年給尤拉的信中哥德巴赫提出了以下猜想:任一大於2的偶數都可寫成兩個質數之和。但是哥德巴赫自己無法證明它,於是就寫信請教赫赫有名的大數學家尤拉幫忙證明,但是一直到死,尤拉也無法證明。 2. 判斷一個數是否為質數 質數定義為在大於1的自然數中

演算法》學習筆記(一) 斐波那契

1. 什麼是斐波那契 斐波那契數列:1, 1, 2, 3, 5, 8, 13, 21, 34, …在數學上,斐波納契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*) 下面寫函式計算第n個數 2. 遞迴方法-

演算法》C++原始碼/java原始碼下載和QQ交流群

《趣學演算法》書中為C++語言實現,圖解多,通俗易懂,小學生,中學生,大學生,已參加工作人員均可輕鬆閱讀。 《趣學演算法》內容摘要及特色:點選開啟連結 《趣學演算法》目錄:點選開啟連結 《趣學演算法》前言:點選開啟連結 《趣學演算法》京東app試讀:點選開啟連結 《趣學演算法》非同步社

演算法NYOJ 阿里巴巴與四十大盜

題目描述: 有一天,阿里巴巴趕著一頭毛驢上山砍柴。砍好柴準備下山時,遠處突然出現一股煙塵,瀰漫著直向上空飛揚,朝他這兒捲過來,而且越來越近。靠近以後,他才看清原來是一支馬隊,他們共有四十人,一個個年輕力壯、行動敏捷。一個首領模樣的人揹負沉重的鞍袋,從叢林中一直來到那個大石頭跟前,喃喃地說道:

演算法NYOJ加勒比海盜船

題目描述: 在北美洲東南部,有一片神祕的海域,那裡碧海藍天、陽光明媚,這正是傳說中海盜最活躍的加勒比海(Caribbean Sea)。17世紀時,這裡更是歐洲大陸的商旅艦隊到達美洲的必經之地,所以當時的海盜活動非常猖獗,海盜不僅攻擊過往商人,甚至攻擊英國皇家艦…… 有一天,海盜們截獲了一

演算法》前言

有一天,一個學生給我留言:“我看到一些資料,介紹機器人具有情感,真是不可思議,我對這個特別感興趣,但我該怎麼做呢?”。我告訴他,先看演算法。過了一段,這個學生苦惱的說:“演算法書上那些公式,大段的程式,又不能執行,太令人抓狂!我好像懂了一點,卻又什麼都不懂!”,我給他推薦了

演算法》原始碼

chapter2   連結:https://pan.baidu.com/s/1ggkOOD1 密碼:sunachapter3  連結:https://pan.baidu.com/s/1eSYFBpw 密碼:huz6chapter4  連結:https://pan.baidu.

【數學】kd 樹演算法思路篇(憂傷的小兔子)

導語:kd 樹是一種二叉樹資料結構,可以用來進行高效的 kNN 計算。kd 樹演算法偏於複雜,本篇將先介紹以二叉樹的形式來記錄和索引空間的思路,以便讀者更輕鬆地理解 kd 樹。 圖較多,小心流量  作者:肖睿編輯:巨集觀經濟算命師本文由JoinQuant量化課堂推出,本文的難度屬於

AIOPS最全講解TextRank演算法博文彙總

CSDN部落格 自然語言處理入門(8)——TextRank jieba結巴分詞–關鍵詞抽取(核心詞抽取) textrank演算法原理與提取關鍵詞、自動提取摘要PYTHON TextRank演算法的基本原理及textrank4zh使用例項 基於TextRank的關鍵詞提取演算法 TextR

機器學習演算法——評價指標彙總

準確率,精確率,召回率和F1 準確率(Accuracy), 精確率(Precision), 召回率(Recall)和F1-Measure ROC-AUC ROC曲線 需要提前說明的是,我們這裡只討論二值分類器。對於分類器,或者說分類演算法,評價指標主要有precision,recal

[圖形] 經典演算法 - Kajiya三維紋理渲染毛髮

簡介         渲染複雜度高細節豐富的場景一直是影象繪製的重要目標。一個想法是引入不同尺度的層次,每一層次對應一種精度幾何模型。因此那些複雜的小物體可以被歸類為可被簡化的幾何物體。         但是,繪

運動偵測演算法概論及彙總

運動目標檢測是指在序列影象中檢測出變化區域並將運動目標從背景影象中提取出來。通常情況下,目標分類、跟蹤和行為理解等後處理過程僅僅考慮影象中對應於運動目標的畫素區域,因此運動目標的正確檢測與分割對於後期處理非常重要然而,由於場景的動態變化,如天氣、光照、陰影及雜亂背景干擾等的影響,使得運動目標的檢測與

kd 樹演算法思路

【量化課堂】kd 樹演算法之思路篇 JoinQuant量化課堂 釋出於 2016-09-01 13581 17 35 導語:kd 樹是一種二叉樹資料結構,可以用來進行高效的 kNN 計算。kd 樹演算法偏於複雜,本篇將先介紹以二叉樹的形式來記錄和索引空間的思路,以便讀者更輕鬆

小朋友經典演算法(14):回溯法和八皇后問題

一、回溯法 回溯法(探索與回溯法)是一種選優搜尋法,又稱為試探法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。 二、八皇后問題 (一)問

資訊奧賽演算法課程目錄

第一課、高精度計算 1、高精度計算   點這裡 2、高精度加法   點這裡 3、高精度減法   點這裡 4、高精度乘法   點這裡 5、高精度除法   點這裡 第二課、排序

幾種常用排序演算法思路和複雜度對比

1、插入排序——直接插入排序、希爾排序 (1)直接插入排序思路:從第1號元素開始,每個元素依次與前面的元素做比較,小的排前面,這樣當比較到最後一 個元 素完即完成排序。 (2)希爾排序思路:     

跳出課本KMP演算法

KMP演算法用於串的模式匹配,主串S,子串T(也叫模式串),模式匹配意思是從S中找出跟T一樣的子串,就是說判斷S是否包含T,時間複雜度O(m+n),實現這個演算法關鍵有兩步,第一步,求next陣列,第二步KMP主演算法 如何理解next陣列,**next[j]表示當子串T中第j個字元與主

初學者演算法|談什麼是演演算法和時間複雜度

進階篇:深入時間複雜度的實際情況到目前為止,我們認識了何謂演演算法,以及評斷演演算法設計好壞的工具:時間複雜度。接下來的部分,屬於比較進階的練功,對剛接觸的新手可能會覺得有點難度或沒辦法完全理解。小小的建議是,如果你看第一次沒辦法完全體會,可以留到對程式設計更熟悉後再回頭複習。而當然,如果有任何問題也都歡迎討

初學者演算法|從時間複雜度認識常見演演算法(一)

O(log n):二分搜尋法時間複雜度為 O(log n) 的演演算法(這邊的 log 都是以二為底),代表當輸入的數量是 n 時,執行的步驟數會是 log n。(讓忘記 log 是什麼的同學們複習一下,當 log n = x 的意思是 n = 2^x,如果這部分的腦細胞尚未復活,且讓我們先記住 n = 2^