算法的設計基本方法的理解

  1. 算法設計基本方法有什麼好處?算法

    瞭解常見的算法設計方法以及它們之間的區別,有利於構建算法思惟的廣度,有充分的理論知識。固然,若是算法思惟的深度再好的話,未來你見識的算法越多,天下之間全部的算法,都會融入到你的理論和實踐當中。dom

  2. 常見算法分類ide

    窮舉法(暴力法,蠻力法)它的基本思想是分別列出全部各類可能解,測試其是否知足條件,如果則輸出。函數

    回溯法:有通用的解題法之稱,是一種將問題的全部解組織的僅僅有條,能避免沒必要要的窮舉搜索,採用的思惟是,深度遍歷,中間再加兩個約束條件和限界函數,不行就回溯,轉其餘結點,繼續深度優先。測試

    遞推法:分爲兩種,一種是順推,另一種是逆推,都是根據已知條件,推導出未知條件。優化

    迭代法展轉法):是一種不斷用變量的舊值遞推新值的過程,跟迭代法相對應的是直接法,即一次性解決問題。迭代法又分爲精確迭代和近似迭代。「二分法」和「牛頓迭代法」屬於近似迭代法。迭代算法是用計算機解決問題的一種基本方法。它利用計算機運算速度快、適合作重複性操做的特色,讓計算機對一組指令(或必定步驟)進行重複執行,在每次執行這組指令(或這些步驟)時,都從變量的原值推出它的一個新值。迭代法經常用於求方程或方程組近似根,在設計迭代式時,要特別注意收斂問題,對於非收斂的式子不能用做迭代式。spa

        遞歸法:是指在定義自身的同時又出現了對自身的調用,在一個函數內直接調用本身,則稱爲直遞歸函數,若是函數通過一系列調用的語句,經過其餘函數間接調用本身,則其稱爲間接遞歸。不斷的經過將一個大問題,轉化爲一個規模小的問題,將規模小的問題,在轉換成更規模小的問題,遞歸有時候能夠理解成嵌套中的嵌套。小問題,解決好了,向上返回結果,一般在遞歸的時候,有遞歸和非遞歸說法,非遞歸須要藉助棧。遞歸法是不少其餘高級算法的基礎。設計

        分治法就是把一個複雜的問題分紅兩個或更多的相同或類似的子問題,再把子問題分紅更小的子問題……直到最後子問題能夠簡單的直接求解,原問題的解即子問題的解的合併。orm

        貪婪法:老是作出在當前看來最好的選擇,也就是說,貪心算法並不從總體最優考慮,它所作的選擇只是在某種意義上的局部最優選擇。固然,但願貪心算法獲得的最終結果也是總體最優的,雖然貪心算法不能對全部問題獲得總體最優解,但對許多問題能產生總體最優解。遞歸

        動態規劃法:動態規劃法與分治法和回溯法都有某些相似,也是基於問題的劃分解決(多步決策,遞增生成子解)的。可是在遞增生成子解的過程當中,力圖朝最優方向進行,並且也不回溯。所以動態規劃法效率更高,且經常使用來求最優解,而不像回溯法那樣可直接求全解。

只從過程來看,能夠簡單地把動態規劃法看作是回溯法去掉了回溯(這個能夠容易理解)或者嚴格迭代分治法。這個怎麼理解,也就是說,把一個問題的解決分紅多個步驟(分治法),每一個步驟都是在前面的步驟基礎上,獲得一個新的子解,字解隨着步驟的進行,進而逐步擴大,最後一步獲得完整的解。

       模擬法:一般都是利用隨機函數來模擬天然界中發生的不可預測的狀況。Java中random,c中srand

3.常見算法之間的區別

    1)分治法和動態規劃算法的區別

    動態規劃算法在遇到重疊子問題顯示出了至關大的優點,若是這個問題沒有重疊子問題,能夠考慮分治法,若是有重疊子問題,動態規劃算法效率更高。

   2)貪心發和動態規劃法的區別

     我的感受貪心發是動態規劃算法的一個特例,都具備最優子結構特徵。

   3)回溯法和窮舉法的區別

      都是生成解空間,回溯法通常主要用來解決三類問題(子集問題,排列問題,組合問題)回溯法,多了約束條件和限界條件,所以避免了無謂的搜索。

  4)回溯法和遞歸法的區別?

 

  5)動態規劃和貪心算法以及回溯法的區別

,這些方法所要解決的問題,通常都是決策問題。而貪心法通常是來求解最優問題的,並且他們其實都是在對問題的狀態空間樹進行搜索,在這個狀態空間樹中搜索最佳的路徑以便求出最優策略。而貪心法是從上到下只進行深度搜索的,也就是說它是一口氣走到黑的,一口氣吃成胖子的,它的代價取決於子問題的數目,也就是樹的高度,每次在當前問題的狀態上做出的選擇都是1,也就是說,它實際上是不進行廣度搜索的,這也形成了它的一個缺點:它得出的解不必定是最優解,頗有多是近似最優解。

動態規劃法在最優子結構的前提下,從狀態空間樹的葉子節點開始向上進行搜索,而且在每一步都根據葉子節點的當前問題的情況做出選擇,從而做出最優決策,因此她的代價就是子問題的個數和可選擇的數目,因此它求出的解必定是最優解。

相比回溯法它它去掉了回溯的過程,於是效率較高。

4.解決問題的思路

 1.若是這個問題很差求得,就將其轉換成另一個問題,好比數學當中的每每求最優化問題,將其轉化爲對偶問題,計算機中,交通燈問題,將其轉換成圖的找色問題。最短路徑問題,轉換成借電腦問題;你要班級中借5臺電腦,你確定將你關係好的人,排個序,而後從最好的人去接,第二步就是將你第二關係好的人,和讓你第一關係好多人幫你借電腦,第三就是讓你第三關係好的人和你第二關係好的人和他關係好的人以及他的第二關係好的人去向他第一個關係好的人借電腦。

2.若是這個問題能夠容易解,那就可使用不少種方法去解。

相關文章
相關標籤/搜索