Python之演算法基礎

來源:互聯網
上載者:User

標籤:找不到   演算法設計   方法   而且   .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之演算法基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.