求解算法的時間複雜度

求解算法的時間複雜度的具體步驟是:
  ⑴ 找出算法中的基本語句;
  算法中執行次數最多的那條語句就是基本語句,通常是最內層循環的循環體。
  ⑵ 計算基本語句的執行次數的數量級;
  只需計算基本語句執行次數的數量級,這就意味着只要保證基本語句執行次數的函數中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能夠簡化算法分析,並且使注意力集中在最重要的一點上:增長率。
  ⑶ 用大Ο記號表示算法的時間性能。
  將基本語句執行次數的數量級放入大Ο記號中。
  如果算法中包含嵌套的循環,則基本語句通常是最內層的循環體,如果算法中包含並列的循環,則將並列循環的時間複雜度相加。例如:
  for (i=1; i<=n; i++)
  x++;
  for (i=1; i<=n; i++)
  for (j=1; j<=n; j++)
  x++;
  第一個for循環的時間複雜度爲Ο(n),第二個for循環的時間複雜度爲Ο(n2),則整個算法的時間複雜度爲Ο(n+n2)=Ο(n2)。
  常見的算法時間複雜度由小到大依次爲:
  Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)
Ο(1)表示基本語句的執行次數是一個常數,一般來說,只要算法中不存在循環語句,其時間複雜度就是Ο(1)。Ο(log2n)、Ο(n)、Ο(nlog2n)、Ο(n2)和Ο(n3)稱爲多項式時間,而Ο(2n)和Ο(n!)稱爲指數時間。計算機科學家普遍認爲前者是有效算法,把這類問題稱爲P類問題,而把後者稱爲NP問題。
這隻能基本的計算時間複雜度,具體的運行還會與硬件有關。
上面的這部分內容是比較可靠的,理解的時候,可以參看着下面的這部分內容。
在計算算法時間複雜度時有以下幾個簡單的程序分析法則:
1.對於一些簡單的輸入輸出語句或賦值語句,近似認爲需要O(1)時間
2.對於順序結構,需要依次執行一系列語句所用的時間可採用大O下”求和法則”
求和法則:是指若算法的2個部分時間複雜度分別爲 T1(n)=O(f(n))和 T2(n)=O(g(n)),則 T1(n)+T2(n)=O(max(f(n), g(n)))
特別地,若T1(m)=O(f(m)), T2(n)=O(g(n)),則 T1(m)+T2(n)=O(f(m) + g(n))
3.對於選擇結構,如if語句,它的主要時間耗費是在執行then字句或else字句所用的時間,需注意的是檢驗條件也需要O(1)時間
4.對於循環結構,循環語句的運行時間主要體現在多次迭代中執行循環體以及檢驗循環條件的時間耗費,一般可用大O下”乘法法則”
乘法法則: 是指若算法的2個部分時間複雜度分別爲 T1(n)=O(f(n))和 T2(n)=O(g(n)),則 T1*T2=O(f(n)*g(n))
5.對於複雜的算法,可以將它分成幾個容易估算的部分,然後利用求和法則和乘法法則技術整個算法的時間複雜度
另外還有以下2個運算法則:
(1) 若g(n)=O(f(n)),則O(f(n))+ O(g(n))= O(f(n))
(2) O(Cf(n)) = O(f(n)),其中C是一個正常數
可以用以上法則對下面程序段進行簡單分析
①for (i=0; i

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章