完成了陣列的封裝之後我們還需對其進行複雜度分析:
此處的複雜度分析主要是指時間複雜度分析,演算法的時間複雜度反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很好反映出演算法的優劣與否。
1.簡單概念
在各種不同演算法中,若演算法中語句執行次數為乙個常數,則時間複雜度為o(1),另外,在時間頻度不相同時,時間複雜度有可能相同,如t(n)=n
2+3n+4與t(n)=4n
2+2n+1它們的頻度不同,但時間複雜度相同,都為o(n
2)。 按數量級遞增排列,常見的時間複雜度有:常數階o(1),對數階o(log2n),線性階o(n),線性對數階o(nlog2n),平方階o(n
2),立方階o(n
3),..., k次方階o(n
k),指數階o(2
從圖中可見,我們應該盡可能選用多項式階o(n
k)的演算法,而不希望用指數階的演算法。
見的演算法時間複雜度由小到大依次為:ο(1)<ο(log2n)<ο(n)<ο(nlog2n)<ο(n
2)<ο(n
3)<…<ο(2
n)<ο(n!)
2.大o簡單定義(非數學領域)
大o描述的是演算法執行時間和輸入資料之間的關係
3.簡單程式時間複雜度分析
在上述中演算法和n呈線性關係,那為什麼要使用大o呢?稱作o(n)?
其實上述的程式中,實際的實際時間複雜度:t = c1*n + c2,在這裡忽略了常數c1和c2。
4.對動態陣列的時間複雜度進行分析
(1)動態陣列新增操作時間複雜度分析
(1)addlast(e)方法 :只需在最後位置新增 時間複雜度 為o(1)
(2)addfirst(e)方法,陣列中均需向後移動一位 時間複雜度 為o(n)
(3)add(index,e)方法,在index位置插入e,時間複雜度與選擇的位置有關,選擇最後時間複雜度 為o(1);選擇第乙個位置時間複雜度 為o(n);對於其他情況與概率有關,在平均情況下只需要移動n/2個位置 時間複雜度 為o(n/2)=o(n)
總的來說:陣列新增的時間複雜度為o(n)(最壞情況考慮)
在新增的時候可能會觸發resize方法,需要移動n個元素到新陣列中 時間複雜度 為o(n)
(2)動態陣列刪除操作時間複雜度分析
相同的分析方法,可以得出刪除操作的時間複雜度
(3)動態陣列修改操作時間複雜度分析
對於修改,只要通過索引找到即可進行修改,時間複雜度為o(1)
(4)動態陣列查詢操作時間複雜度分析
關於resize方法,我們完全使用最壞情況分析是不合理的,其分析情況我們將在下一節進行學習~
jQuery1 9 1針對checkbox的調整
在jquery 1.8.x中的版本,我們對於checkbox的選中與不選中操作如下 判斷是否選中 checkbox prop checked 設定選中與不選中狀態 checkbox attr checked true checkbox attr checked false 但此方法在jquery1....
jQuery1 9 1針對checkbox的調整
在jquery 1.8.x中的版本,我們對於checkbox的選中與不選中操作如下 判斷是否選中 checkbox prop checked 設定選中與不選中狀態 checkbox attr checked true checkbox attr checked false 但此方法在jquery1....
selenium(4) 針對鍵盤的操作
1 usr bin env python2 coding utf 8 34 5 title 6 time 2020 6 19 13 33 7 author xinhua 8 blog 9 10from time import sleep 1112 from selenium import webdr...