日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构(二)之算法基础

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构(二)之算法基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  一.為什么要學習算法?

    先來個簡單的算法比較:求sum=1+2+3+...+(n-1)+n的結果. 輸入整數n,輸出 sum 
      解法一:for循環

  function sum(n){var s=0;            //執行1次for(var i=1;i<n+1;i++){   s+=i;           //執行n+1次

     }     return s;            //執行1次
  }

      解法二:

function sum(n){return n*(n-1)/2;    //執行1次}

    很明顯,解法二要優于解法一。因為解法二需要運算的次數少。我們去衡量一個算法的好壞主要是從時間復雜度和空間復雜度來看的,其次才到可讀性,可維護性。那么接下來講講怎么來計算時間復雜度與空間復雜度。

  二.時間復雜度的計算:

    推導大O階來計時間復雜度

    規則:1.用常數1取代運行時間中的所有加法常數(即常數階都計為O(1) );

       2.在修改后的運行次數函數中,只保留最高階項;

       3.如果最高階項存在且不是1,則去除與這個項相乘的常數

?    解法一的運行次數:  f1(n) = 1+n+1+1=n+3 次  時間復雜度記作 T(n) = O( f1(n) )  //n+3直接舍掉常數,變為n ,名為“線性階”

     解法二的運行次數: f2(n) = 1次        時間復雜度記作 T(n) = O( f1(1) )  //名為“常數階”

     由此可知解法一隨n的增加,運行次數也增加,而解法二始終只需運行一次

    對數階:

function count(n){var c=1;      //執行1次while(c<n){c=c*2;  //執行log2n} return c; }

?

    也就是說2的多少次冪大于n,就運行了多少次。時間復雜度計做O(logn),名為對數階。
    平方階:
function num(n){var count=0;for(var i=0;i<n;i++){  //執行 n 次for(var j=i;j<n;j++){count++;        //執行 n-i 次}}return count; }

?

?  以上代碼執行總次數為n+(n-1)+(n-2)+...+1 = n2/2+n/2 次,用大O推導法去掉相加常數n/2,去掉相乘常數1/2,所以時間復雜度為O(n2)
   總結:
    時間復雜度有多種,這里是討論常見的階。常用的時間復雜雜耗時的時間從小到大依次為:
    O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) <O(nn)

   擴展:最壞時間復雜度

    例:給出一個數組arr,里面有n個隨機數,找出arr中的指定數字。那么這個數字有可能出現在數組中的第一個位置,時間復雜度為O(1);也可能出現在數組最后一個位置,時間復雜度為O(n) ,從概率來說,平均查找時間應該是n/2次。

    最壞時間復雜度從字面上就能理解,時間最長的情況,時間不會更長,情況不會更壞了。通常沒有特殊說明,我們計算的時間復雜度都為最壞時間復雜度。    

  三.算法空間復雜度

    算法的空間復雜度并不是計算實際占用的空間,而是計算整個算法的輔助空間單元的個數,與問題的規模沒有關系。算法的空間復雜度S(n)定義為該算法所耗費空間的數量級。S(n)=O(f(n)) 若算法執行時所需要的輔助空間相對于輸入數據量n而言是一個常數,則稱這個算法的輔助空間為O(1)。通常,我們用時間復雜度來衡量算法的優略。

轉載于:https://www.cnblogs.com/zhoulin-circle/p/7413229.html

總結

以上是生活随笔為你收集整理的数据结构(二)之算法基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。