1. 程式人生 > >演算法時間複雜度的簡單推導

演算法時間複雜度的簡單推導

for(i=1;i<n;i++)①  

{

y=y+1;

for(j=0;j<=2n;j++)③ 

x++;

}

①  n-1+1=nfrom 1 to n+1,n個數字   1是下界,n是上界。n雖不進入迴圈體,但是在這裡卻需要計算。從下界到上界共計算了n-1+1次

 (n-1)-1+1=n-1from 1 to n-1,n-1個數字   迴圈從1到n-1,計算了n-1-1+1=n-1次。

③ (n-1)(2n+1-0+1)=2(n-1)(n+1)from 0 to 2n+1,2n+1-0+1=2(n+1)個數字,然後再乘以外側迴圈(n-1)

④ (n-1)(2n-0+1)=(n+1)(2n+1)from 0 to 2n,

2n-0+1=2n+1 個數字然後再乘以外側迴圈(n-1)

So, f(n)=n+(n-1)+2(n-1)(n+1)+(n+1)(2n+1)

      =4n^2+n-4

程式的時間複雜度是 T(n)=O(n^2)

============================================

a=0;

b=1;                          ①          

for(i=1;i<=n;i++)  ②

{

s=a+b;              

b=a;                   ④

a=s;   

}

①   2

 (n+1)-1+1=n+1from 1 to n+1,

n+1-1+1=n+1個數字  迴圈的下界是1,上界是n+1,同樣不進入迴圈體,卻需要計算。從下界到上界共計算了n+1次。

③ n-1+1=nfrom 1 to n,n-1+1=n個數字。   迴圈從1到n,計算了n次

④ n-1+1=nfrom 1 to n,n-1+1=n個數字。   迴圈從1到n,計算了n次

n-1+1=nfrom 1 to n,n-1+1=n個數字。   迴圈從1到n,計算了n次

So,f(n)=2+(n+1)+3n

     =4n+3

程式的時間複雜度是 T(n)=O(n)

相關推薦

歐幾里得演算法時間複雜簡單分析

前言 這個問題是在《資料結構與演算法C++描述(第三版中文)》所遇到的,文中給出的迭代次數O(logN)的結果就像是教授所說的“顯然”一樣高深莫測,有點雲裡霧裡的感覺!在“網羅”了一些資料後,在這裡找到了自己想要的答案,筆者接下來就結合自己的理解列出文章中的求

演算法時間複雜簡單推導

for(i=1;i<n;i++)①   { y=y+1;② for(j=0;j<=2n;j++)③  x++;④ } ①  n-1+1=nfrom 1 to n+1,共n個數字   1是下界,n是上界。n雖不進入迴圈體,但是在這裡卻需要計算。從下界到上界

設任意n個整數存放於陣列A[1..n]中,試編寫演算法,將所有正數排在所有負數前面(要求:演算法時間複雜為O(n))。

注意陣列的實際長度 #include <iostream> using namespace std; void sort(int A[],int n) { int i=0;//陣列的頭下標 int j,x; j=n-1;//陣列的尾下標 while

刪除連結串列中的某個數,演算法時間複雜是O(n)

import java.util.Scanner; /** * */ /** * @author jueying: * @version 建立時間:2018-10-29 下午04:05:03 * 類說明 */ /** * @author jueying

在一個含有空格字元的字串中加入XXX,演算法時間複雜為O(N)

import java.util.Scanner; /** * */ /** * @author jueying: * @version 建立時間:2018-10-18 下午10:54:54 * 類說明 */ /** * @author jueying

2.資料結構和演算法——演算法時間複雜

定義 在進行演算法分析時,語句總的執行次數T(n)時關於問題規模n的函式,進而分析T(n)隨n的變化情況並確定T(n)的數量級。演算法的時間複雜度,也就是演算法的時間度量,記作:T(n) = O(f(n))。它表示歲問題規模n的增大,稱作演算法的漸進時間複雜度,簡稱為時間複雜度

堆排序優化與幾個排序演算法時間複雜

我們通常所說的堆是指二叉堆,二叉堆又稱完全二叉樹或者叫近似完全二叉樹。二叉堆又分為最大堆和最小堆。 堆排序(Heapsort)是指利用堆這種資料結構所設計的一種排序演算法,它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。陣列可以根據索引直接獲取元素,時間複雜度為O(1),也就是常量,因此對於取

常用資料結構與演算法時間複雜求解

1.0 資料結構的相關概念 2.0 一些基本演算法的時間複雜度 O(1): int x=1; O(n): for(int i = 0; i < n; i++){ printf("%d",i); } O(lo

第一章作業2-演算法時間複雜和空間複雜

1-1 演算法分析的兩個主要方面是時間複雜度和空間複雜度的分析。 (1分) T      1-2 N​^2​​logN和NlogN^​2​​具有相同的增長速度。 (2分) F: N​^2​​logN較快 ,取對數對增長影響還是蠻大的,畢竟裸的logn函式後期增長

演算法時間複雜

時間複雜度 演算法複雜度分為時間複雜度和空間複雜度。其作用: 時間複雜度是指執行演算法所需要的計算工作量;而空間複雜度是指執行這個演算法所需要的記憶體空間。(演算法的複雜性體現在執行該演算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間(即暫存器)資

主定理求解演算法時間複雜

主定理 所謂主定理,就是用來解遞迴方程的一種方法,此方法可以用來求解大多數遞迴方程。 設遞迴方程為T(n)=aT(n/b)+f(n)  (其中a≥1,b>1) 主定理:      1. 如果存在常數ε>0有f(n)=O(n^(logb^a-ε)

利用遞迴樹求遞迴演算法時間複雜

  遞迴演算法時間複雜度的計算方程式一個遞迴方程:      在引入遞迴樹之前可以考慮一個例子:   T(n) = 2T(n/2) + n2   迭代2次可以得:   T(n) = n2 + 2(2T(n/4) + (n/2) 2)   還可以繼續迭代,將其完全展

常見排序演算法時間複雜及穩定性

排序演算法 平均時間複雜度 最壞時間複雜度 穩定性 選擇排序 O(N²) O(N²) 不穩定 氣泡排序 O(N²

最長遞增子序列優化演算法(時間複雜為nlgn)C++實現

最長遞增子序列優化演算法(時間複雜度為nlgn) // 最長遞增子序列優化演算法.cpp : Defines the entry point for the console application. /

並行排序演算法——時間複雜O(n)的排序法

最近老師講了並行的排序演算法,讓我對這個原來不是很瞭解的排序演算法產生了濃厚的興趣。並行排序方法,是指採用平行計算的方法對一組資料進行排序,理論上是在類似內排序的環境下,採用多核並行的方法讓時間降低,排序的複雜度最好的情況下能降低至O(n)左右。 排序的實質

演算法時間複雜總結

僅供自己參考。 圖論演算法: Dijkstra點對點最短路: for(i=1;i<=n;i++) { min=MAX; for(j=1;j<=n;j++) { if(!mar

第一篇部落格:對插入排序和歸併排序演算法時間複雜的學習

    第一次寫部落格,心情難免有點忐忑,不過為了達到心中的小目標,儘可能的用有效率的方法去提升自己。廢話不多說,下面進入正題。    剛看了網易公開課裡的《麻省理工學院公開課:演算法導論》,受益頗深!國外學校的講課方式確實更有趣味和深度(或許因為在學校壓根沒聽進去過幾節課)

Dijkstra演算法時間複雜

question: 我只知道是O(n2),不知道怎麼算來的,請詳細講一下。 網上一搜全都是這句話: Dijkstra 演算法最簡單的實現方法是用一個連結串列或者陣列來儲存所有頂點的集合 Q,所以搜尋 Q 中最小元素的運算(Extract-Min(Q))只需要線性搜尋 Q 中

數構與演算法 | 什麼是大 O 表示演算法時間複雜

   正文:     開篇我們先思考這麼一個問題:一臺老式的 CPU 的計算機執行 O(n) 的程式,和一臺速度提高的新式 CPU 的計算機運 O(n2) 的程式。誰的程執行效率高呢?      答案是前

演算法演算法的概述和演算法時間複雜分析

演算法:演算法的概述和演算法時間複雜度分析 我是一名在校大學生,學習到了演算法這門課程,想整理一些筆記和大家分享,各位大佬不喜勿噴,僅供參考,希望能對大家有所幫助。 演算法,什麼是演算法 ? 它是求解問題的一系列計算步驟,用來將輸入的資料轉換成輸出結果。我總結關於演算法,有