標籤:找不到 演算法設計 方法 而且 .com 線性 images 輔助 需要
1》遞迴相關:
遞迴:遞迴演算法是一種直接或間接地調用自身演算法的過程,在電腦編寫程式中,遞迴演算法對解決一大類問題是十分有效,它往往使演算法的描述簡潔而且 易於理解;
特點:
(1)遞迴就是在過程或函數中調用自身;
(2)在使用遞迴策略時,必須有一個明確的遞迴結束條件,稱為遞迴出口;
(3)遞迴演算法解題通常顯得很簡潔,但遞迴演算法解題的運行效率較低,所以一般不提倡使用遞迴演算法設計程式;
(4)在遞迴調用的過程當中系統為每一層的返回點,局部量等開闢了棧來儲存,遞迴次數過多容易造成棧溢出等,所以一般不提倡使用遞迴演算法設計 程式;
要求:
遞迴演算法所體現的“重複”一般有三個要求:
(1)每次調用在規模上都有所縮小(通常是減半);
(2)相鄰兩次重複直接有緊密的聯絡,前一次要為後一次做準備(通常前一次的輸出就作為後一次的輸入);
(3)在問題的規模極小時必須用直接給出解答而不再進行遞迴調用,因而每次遞迴調用都是有條件的(以規模未達到直接解答的大小為條件),無條 件遞迴調用將會成為死迴圈而不能正常結束;
樣本:
2》通過遞迴實現裴波那契數列(每個數總是等於前兩個數的值的數列):
3》演算法基礎之二分尋找:
會找不到1,現做出改正:
4》演算法基礎之二維數組:
1>產生列表方法:
2>產生二維數組方法:
eg:將一個二維數組翻轉90度:
自己做的:
參考老師代碼:
5》演算法基礎之冒泡排序:
6》時間複雜度介紹:
1>時間頻度:
一個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機進行測試才能知道,當我們可能也沒有必要對每個演算法都上機測試,只需知道哪個算 法花費等待時間多,哪個演算法花費的時間少就可以了;並且一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費 時間就多,一個演算法中的語句執行次數稱為語句頻度或者時間頻度,記為T(n);
2>時間複雜度:
在剛才提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度T(n)也會不斷變化;但有時我們也想指定它變化時呈現什麼規律,為此,我們 引入時間複雜度概念;一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函數,用T(n)表示,若有某個輔助函數f(n),使得當n趨近於無窮大 時,T(n)/f(n)的極限值為不等於零的常數,則稱f(n)是T(n)的同數量級函數,記作T(n)=O(f(n)),稱O(f(n))為演算法的漸進時
間複雜度,簡稱時間複雜度;
3>指數時間:
指的是一個問題求解所需要的計算時間m(n),依輸入資料的大小n而呈指數成長(即輸入資料的數量依線性成長,所花的時間將會以指數成長)
4>樣本:
第一個for迴圈的時間複雜度為O(n),第二個for迴圈的時間複雜度為O(n^2),則整個演算法的時間複雜度為O(n+n^2)=O(n^2);
5>常數時間:
若對於一個演算法,T(n)的上界與輸入大小無關,則稱其具有常數時間,記作O(1)時間;一個例子是訪問數組中的單個元素,因為訪問它只需要一條指 令,但是,找到無序數組中的最小元素則不是,因為這需要遍曆所有元素找到最小值,這是一項線性時間的操作,或稱O(n)時間;但如果預Crowdsourced Security Testing道元素的數 量並假設數量保持不變,則該操作也可被稱為具有常數時間;
6>對數時間:
若演算法的T(n)=O(log n),則稱其具有對數時間;常見的具有對數時間的演算法有二叉樹的相關操作和二分搜尋;對數時間的演算法是非常有效,因為每增加 一個輸入,其所需要的額外計算時間會變小;遞迴將字串砍半並且輸出是這個類別函數的一個簡單例子;
7>線性時間:
如果一個演算法的時間複雜度為O(n),則稱這個演算法具有線性時間,或O(n)時間,非正式地說,這意味著
對於足夠大的輸入,已耗用時間增加的大小與輸入成線性關係。例如,一個計算資料行表所有元素的和的程式,需要的時間與列表的長度成正比;
Python之演算法基礎