Java數據結構-00導論

一個程序是怎樣組成的呢?數據結構+算法=程序算法

1、什麼是數據結構:數組

  簡單定義就是研究數據的存儲方式;選擇適當的數據結構能夠提升計算機程序的運行效率(時間複雜度O)和存儲效率(空間複雜度S)。數據結構

2、數據結構的分類spa

  數據結構分類大體能夠按照邏輯結構(抽象)跟物理結構(存儲結構)blog

   

3、時間複雜度與空間複雜度資源

  1.時間複雜度:io

    ①概念:執行算法須要消耗的時間長短,越快越好。好比你在電腦上打開計算器,若是一個普通的運算要消耗1分鐘時間,那誰還會用它呢,還不如本身口算呢。class

    ②常見時間複雜度 效率

      A.常數階O(1)變量

        

      分析:咱們假定每執行一行代碼所須要消耗的時間爲1個時間單位,那麼以上3行代碼就消耗了3個時間單位。那是否是這段代碼的時間複雜度表示爲O(n)呢 ?其實不是的,由於大O符號表示法並非用於來真實表明算法的執行時間的,它是用來表示代碼執行時間的增加變化趨勢的。 上面的算法並無隨着某個變量的增加而增加,那麼不管這類代碼有多長,即便有幾萬幾十萬行,均可以用O(1)來表示它的時間複雜度

        B.線性階O(n)

       

       分析:第1行會執行1次,第2行和第3行會分別執行n次,總的執行時間也就是 2n + 1 次,那它的時間複雜度表示是 O(2n + 1) 嗎?不是的,仍是那句話:「大O符號表示法並非用於來真實表明算法的執行時間的,它是用來表示代碼執行時間的增加變化趨勢的」。因此它的時間複雜度實際上是O(n);

        C.對數階O(logN)

       

       分析:能夠看到每次循環的時候 i 都會乘2(2^i=n),那麼總共循環的次數就是log2n,所以這個代碼的時間複雜度簡寫爲O(logn)

      D.線性對數階O(nlogN)

       

       分析:同上面描述,在while裏面的時間複雜度爲O(logn),for裏面的時間複雜度爲O(n),因此就有O(nO(logn)),簡寫爲O(nlogn)

      E.平方階O(n²)

       

      分析:一樣的,在for裏面的時間複雜度爲O(n),因此就有O(nO(n)),簡寫爲 O(n²)。立方階O(n³)、K次方階O(n^k)參考上面的O(n²) 去理解就行了,O(n³)至關於三層n循環,其它的相似

      F.算法時間複雜度的比較(從小到大):

       

  2.空間複雜度:

    ①概念執行當前算法須要消耗的存儲空間大小,也是越少越好。原本計算機的存儲資源就是有限的,若是你的算法老是須要耗費很大的存儲空間,這樣也會給機器帶來很大的負擔。

    ②常見空間複雜度

      A.空間複雜度 O(1)

      

       分析:若是算法執行所須要的臨時空間不隨着某個變量n的大小而變化,即此算法空間複雜度爲一個常量,可表示爲 O(1),代碼中的 i、j、m 所分配的空間都不隨着處理數據量變化,所以它的空間複雜度 S(n) = O(1)。

         B.空間複雜度 O(n)

        

       分析:這段代碼中,第一行new了一個數組出來,這個數據佔用的大小爲n,後面雖然有循環,但沒有再分配新的空間,所以,這段代碼的空間複雜度主要看第一行便可,即 S(n) = O(n)。

相關文章
相關標籤/搜索