算法入門--陳靜【PPT】_第1頁
算法入門--陳靜【PPT】_第2頁
算法入門--陳靜【PPT】_第3頁
算法入門--陳靜【PPT】_第4頁
算法入門--陳靜【PPT】_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

算法入門 算法簡介 算法( 指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問題的策略機制。也就是說, 能夠對一定規(guī)范的輸入,在有限時間內獲得所要求的輸出 。如果一個算法有缺陷,或不適合于某個問題,執(zhí)行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務。 一個算法的優(yōu)劣可以用 空間復雜度 與 時間復雜度 來衡量。 算法簡介 算法簡介 一個算法應該具有以下五個重要的特征: 1、有窮性( 算法的有窮性是指算法必須能在執(zhí)行有限個步驟之后終止; 2、確切性 (算法的每一步驟必須有確切的定義; 3、輸入項 (一個算法有 0個或多個輸入,以刻畫運算對象的初始情況,所謂 0個輸入是指算法本身定出了初始條件; 4、輸出項 (一個算法有一個或多個輸出,以反映對輸入數據加工后的結果。沒有輸出的算法是毫無意義的; 5、可行性 (算法中執(zhí)行的任何計算步驟都是可以被分解為基本的可執(zhí)行的操作步,即每個計算步都可以在有限時間內完成(也稱之為有效性)。 算法簡介 算法的評定: 算法的時間復雜度是指執(zhí)行算法所需要的計算工作量。一般來說,計算機算法是問題規(guī)模 n 的函數 f(n),算法的時間復雜度也因此記做。 T(n)=(f(n) 因此,問題的規(guī)模 n 越大,算法執(zhí)行的時間的增長率與 f(n) 的增長率正相關,稱作漸進時間復雜度( 在計算時間復雜度的時候,先找出算法的基本操作,然后根據相應的各語句確定它的執(zhí)行次數,再找出 T(n) 的同數量級(它的同數量級有以下: 1, )n, n, n )n , 2的 n!),找出后, f(n) = 該數量級,若 T(n)/f(n) 求極限可得到一常數 c,則時間復雜度 T(n) = O(f(n) 算法簡介 例:算法: i=1;-a3 2.an=2n, an=a2(a1=1),同上 1, 2, 3, 5, 8, 13, an=aaa1=1,a2=2)等等。 程序調用自身的編程技巧稱為 遞歸 ( 一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。 注意: (1) 遞歸就是在過程或函數里 調用自身 ; (2) 在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。 應用例子: 例子有很多,像前面提到的算階乘, 2 下面介紹另一個類似的例子: 樓梯有 上樓可以一步上 1階 ,也可以一步上 2階 ,編一程序計算共有多少種不同的走法 . 設 f(n) 顯然有 f(1)=1,f(2)=2; f(n)=f(f( n2 有興趣的同學還可以去看一下 漢諾塔問題 ,也是很典型的遞歸問題 窮舉法 , 或稱為 暴力破解法 ,其基本思路是:對于要解決的問題,列舉出它的所有可能的情況,逐個判斷有哪些是符合問題所要求的條件,從而得到問題的解。它也常用于對于密碼的破譯,即將密碼進行逐個推算直到找出真正的密碼為止。例如一個已知是四位并且全部由數字組成的密碼,其可能共有 10000種組合,因此最多嘗試 10000次就能找到正確的密碼。理論上利用這種方法可以破解任何一種密碼,問題只在于如何縮短試誤時間。因此有些人運用計算機來增加效率,有些人輔以字典來縮小密碼組合的范圍。 這是最常用的算法。 實例: 使用窮舉法列出 100以內的素數 枚舉 0到 100,依次判斷是不是素數 # n,i; n=2;n=n) %dt,n); 顯示結果為 2,3,5,7,11,13,17,19,23,29,31,37, 41,47,53,59,61,67,71,73,83,89,97. 貪心算法 是一種對某些求最優(yōu)解問題的更簡單、更迅速的設計技術。用貪心法設計算法的特點是一步一步地進行,常以當前情況為基礎根據 某個優(yōu)化測度 作 最優(yōu)選擇 ,而不考慮各種可能的整體情況,它省去了為找最優(yōu)解要窮盡所有可能而必須耗費的大量時間,它采用自頂向下 ,以迭代的方法做出相繼的貪心選擇 ,每做一次貪心選擇就將所求問題簡化為一個規(guī)模更小的子問題 , 通過每一步貪心選擇 ,可得到問題的一個最優(yōu)解,雖然每一步上都要保證能獲得 局部最優(yōu)解 ,但由此產生的全局解 有時不一定是最優(yōu) 的,所以貪婪法 不要回溯 。 貪婪算法 是一種改進了的分級處理方法。其核心是根據題意選取一種量度標準。然后將這多個輸入排成這種量度標準所要求的順序,按這種順序一次輸入一個量。如果這個輸入和當前已構成在這種量度意義下的部分最佳解加在一起不能產生一個可行解,則不把此輸入加到這部分解中。這種能夠得到某種量度意義下最優(yōu)解的分級處理方法稱為貪婪算法。 對于一個給定的問題,往往可能有好幾種量度標準。初看起來,這些量度標準似乎都是可取的,但實際上,用其中的大多數量度標準作貪婪處理所得到該量度意義下的最優(yōu)解并不是問題的最優(yōu)解,而是次優(yōu)解。因此,選擇能產生問題最優(yōu)解的最優(yōu)量度標準是使用貪婪算法的核心。 一般情況下,要選出最優(yōu)量度標準并不是一件容易的事,但對某問題能選擇出最優(yōu)量度標準后,用貪婪算法求解則特別有效。 最優(yōu)解可以通過一系列局部最優(yōu)的選擇即貪婪選擇來達到,根據當前狀態(tài)做出在當前看來是最好的選擇,即局部最優(yōu)解選擇,然后再去解做出這個選擇后產生的相應的子問題。每做一次貪婪選擇就將所求問題簡化為一個規(guī)模更小的子問題,最終可得到問題的一個整體最優(yōu)解 。 基本思路: 建立數學模型來描述問題。 把求解的問題分成若干個子問題。 對每一子問題求解,得到子問題的局部最優(yōu)解。 把子問題的解局部最優(yōu)解合成原來解問題的一個 解。 實現該算法的過程: 從問題的某一初始解出發(fā); 朝給定總目標前進一步 出可行解的一個解元素; 由所有解元素組合成問題的一個可行解。 實例: 0有一個背包,背包容量是 M=150。有 7個物品,物品可以分割成任意大小。 要求盡可能讓裝入背包中的物品總價值最大,但不能超過總容量。 物品 A B C D E F G 重量 3500005值 10$ 40$ 30$ 50$ 35$ 40$ 30$ 分析: 目標函數: 約束條件是裝入的物品總重量不超過背包容量: n/2,則我們只要在數組 半部繼續(xù)搜索 x。 , /在有序表 R0.進行二分查找,成功時返回結點的位置,失敗時返回 -1 , 、下界的初值 K) k) 查找 ; /繼續(xù)在 R.查找 if(找失敗 /d* t a$ f)t a$ w e( y f)t a$ f)t a$ 9rK$&+48rJ$8qJ!e sK$e wP)9rJ$rJ!49sK%&(+4*5()7 rJ!61r K$)7r J$+49rK$&+4rJ$a tL%9sK$&9rK$&+3rJ$a sL%d*r 8#r 9#h+i+y f)y g)t b% y g)t b$ t b$ )r J!(sK%&+4+49rK$&g yQ+5*5r J!(49sK$(g yR+465sK

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論