算法思想

基礎算法思想類別

  1. 遞推算法

  2. 枚舉函數

  3. 遞歸遞歸

  4. 分治遊戲

  5. 貪婪基礎

  6. 回溯(試探)搜索

  7. 模擬

遞推

遞推分類

  1. 順推法:從已知條件出發,逐步推算出要解決問題的方法。
  2. 逆推法:從已知結果出發,用迭表明達式逐步推算出問題開始的條件,即順推法的逆過程。

遞推算法的經典運用

斐波那契數列(順推法):由n-2,n-1項獲得第n項銀行存款(逆推法)循環


枚舉

將問題的全部可能答案都列舉出來,根據判斷條件判斷此答案是否合適,通常用循環實現。方法

枚舉算法的經典運用

百錢買百雞、填寫運算符比賽


遞歸

  1. 遞歸算法在函數或子過程的內部,直接或間接調用本身的算法
  2. 遞歸算法其實是把問題轉化爲規模縮小了的同類問題的子問題,而後再遞歸調用函數或過程來表示問題的解

注意:必須有一個明確的遞歸結束條件;若是遞歸次數過多,容易形成棧溢出。while

遞歸算法的經典運用

漢諾塔問題、階乘問題


分治

  將一個規模爲N的問題分解爲K個規模較小的子問題,這些子問題相互獨立且與原問題性質相同。只要求出子問題的解,就可獲得原問題的解。

分治算法的基本步驟

  1. 分解,將要解決的問題劃分紅若干個規模較小的同類問題
  2. 求解,當子問題劃分得足夠小時,用較簡單的方法解決
  3. 合併,按原問題的要求,將子問題的解逐層合併構成原問題的解

分治算法的經典運用

大數相乘問題、比賽日程安排


貪心

從問題的某一個初始解出發,逐步逼近給定的目標,以便儘快求出更好的解。

貪心算法的侷限

  • 不能保證最後的解是最優的;
  • 不能求最大最小解問題;    
  • 只能求知足某些約束條件的可行解範圍。

貪心算法的基本過程

 1. 從問題的某一初始解出發    

  1. while能向給定總目標前進一步   
  2. 求出可行解的一個解元素     
  3. 由全部解元素組合成問題的一個可行解

貪心算法的經典運用

裝箱問題、找零方案


試探

  在試探算法中,放棄當前候選解,並繼續尋找下一個候選解的過程稱爲回溯。擴大當前候選解的規模,以繼續試探的過程稱爲向前試探。

  (爲求得問題的正確解,會先委婉地試探某一種可能狀況。在進行試探過程當中,一旦發現原來選擇的假設狀況是不正確的,立刻會自覺地退回一步從新選擇,而後繼續向前試探。反覆進行,直到獲得解或證實無解時才死心)

試探算法的基本步驟

    1.針對所給問題,定義問題的解空間

    2.肯定易於搜索的解空間結構

    3.以深度優先方式搜索解空間,並在搜索過程當中用剪枝函數避免無效搜索

試探算法的經典運用

八皇后問題、29選7彩票組合

模擬

對真實事物或者過程的虛擬。

模擬算法的經典運用

猜數字遊戲、擲骰子問題

相關文章
相關標籤/搜索