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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

408考研数据结构复习-时间复杂度与空间复杂度-附统考真题

發(fā)布時間:2023/12/2 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 408考研数据结构复习-时间复杂度与空间复杂度-附统考真题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


文章目錄

    • 一、時間復(fù)雜度
    • 二、空間復(fù)雜度
    • 三、相關(guān)題目


一、時間復(fù)雜度

一個語句的頻度是指該語句在算法中被重復(fù)執(zhí)行的次數(shù)。算法中所有語句的頻度之和記為T(n),它是該算法問題規(guī)模n的函數(shù),時間復(fù)雜度主要分析T(n)的數(shù)量級。算法中基本運算(最深層循環(huán)內(nèi)的語句)的頻度與T(n)同數(shù)量級,因此通常采用算法中基本運算的頻度f(n)來分析算法的時間復(fù)雜度。因此,算法的時間復(fù)雜度記為T(n)=O(f(n))。

式中,O的含義是T(n)的數(shù)量級,其嚴(yán)格的數(shù)學(xué)定義是:若T(n)和f(n)是定義在正整數(shù)集合上的兩個函數(shù),則存在正常數(shù)C和n0,使得當(dāng)n>=n0時,都滿足0<=T(n)<=Cf(n)。

算法的時間復(fù)雜度不僅依賴于問題的規(guī)模n,也取決于待輸入數(shù)據(jù)的性質(zhì)。例如,在數(shù)組A[0…n-1]中,查找給定值k的算法大致如下:

int i=n-1; while(i>=0&&(A[i]!=k))i--; return i;

該算法中語句i--;(基本運算)的頻度不僅與問題規(guī)模n有關(guān),還與輸入實例中A的各元素的取值以及k的取值有關(guān):
①若A中沒有與k相等的元素,則語句3的頻度f(n)=n。
①若A中最后一個元素為k,則語句3的頻度f(n)=0。

最壞時間復(fù)雜度是指在最壞情況下,算法的時間復(fù)雜度。平均時間復(fù)雜度是指所有可能輸入實例在等概率出現(xiàn)的情況下,算法的期望運行時間。最好時間復(fù)雜度是指在最好情況下,算法的時間復(fù)雜度。一般總是考慮在最壞情況下的時間復(fù)雜度,以保證算法的運行時間不會比它更長。

在分析一個程序的時間復(fù)雜性時,有以下兩條規(guī)則:
①加法規(guī)則

T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))

②乘法規(guī)則

T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))

常見的漸近時間復(fù)雜度為:

O(1)<O(logn)<O(n)<O(nlogn)<O(n*n)<O(n*n*n)<O(2的n方)<O(n!)<O(n的n方)

二、空間復(fù)雜度

算法的空間復(fù)雜度S(n)定義為該算法所耗費的存儲空間,它是問題規(guī)模n的函數(shù)。記為S(n)=O(g(n))。

一個程序在執(zhí)行時除需要存儲空間來存放本身所用的指令、常數(shù)、變量和輸入數(shù)據(jù)外,還需要一些對數(shù)據(jù)進行操作的工作單元和存儲一些為實現(xiàn)計算所需信息的輔助空間。若輸入數(shù)據(jù)所占空間只取決于問題本身,和算法無關(guān),則只需分析除輸入和程序之外的額外空間。

算法原地工作是指算法所需的輔助空間為常量,即O(1)。


三、相關(guān)題目

1 以下算法的時間復(fù)雜度為(O(log2n))

void fun(int n){int i=1;while (i<=n)i=i*2; }

解析:找到基本運算i=i*2,設(shè)執(zhí)行次數(shù)為t,則2的t次方<=n,即t<=log2n,因此時間復(fù)雜度T(n)=O(log2n)。

2 有以下算法,其時間復(fù)雜度為(O(n的根號3方))

void fun(int n){int i=0;while (i*i*i<=n)i++; }

解析:基本運算為i++,設(shè)執(zhí)行次數(shù)為t,有ttt<=n,即t的3次方<=n,則t<=n的根號3次方。

3 程序段如下:

for(int i= n-1; i > 1; i--)for (int j = 1; j < i; j++) if(A[j]>A[j+1])A[j]與A[j+1]對換;

其中n為正整數(shù),則最后一行語句的頻度在最壞情況下是(O(n*n))
解析:

4 【2011統(tǒng)考真題】設(shè)n是描述問題規(guī)模的非負(fù)整數(shù),下面的程序片段的時間復(fù)雜度是(O(log2n))

x=2; while(x<n/2)x=2*x;

解析:基本運算為x=2*x,每執(zhí)行一次乘以2,設(shè)執(zhí)行次數(shù)為t,則有2的(t+1)次方<n/2,所以t<log2(n/2)-1=log2n-2,則T(n)=O(log2n)。

5 【2012統(tǒng)考真題】求整數(shù)n的階乘的算法如下,其時間復(fù)雜度是(O(n))

int fact(int n){if(n<=1) return 1;return n* fact(n-1); }

解析:該遞歸相當(dāng)于返回O(n)次。

6 【2013統(tǒng)考真題】已知兩個長度分別為m和n的升序鏈表,若將它們合并為長度為m+n的一個降序鏈表,則最壞情況下的時間復(fù)雜度是(O(max(m,n)))
解析:兩個升序鏈表合并,兩兩比較表中元素,每比較一次,確定一個元素的鏈接位置(取較小元素)。當(dāng)一個鏈表比較結(jié)束后,將另一個鏈表的剩余元素插入即可。最壞的情況是兩個鏈表中的元素依次進行比較,因為2max(m,n)>=m+n,所以時間復(fù)雜度為O(max(m,n))。

7 【2014統(tǒng)考真題】下列程序段的時間復(fù)雜度是(nlong2n)

count=0; for(k=1;k<=n;k*=2)for(j=1;j<=n;j++)count++;

解析:內(nèi)層循環(huán)條件j<=n與外層循環(huán)的變量無關(guān),各自獨立,每執(zhí)行一次j自增1,每次內(nèi)層循環(huán)都執(zhí)行n次。外層循環(huán)條件k<=n,增量定義為k*=2,可知循環(huán)次數(shù)t滿足k=2的t次方<=n,即t<=log2n。內(nèi)層循環(huán)的時間復(fù)雜度為O(n),外層為O(log2n)。對于嵌套循環(huán),根據(jù)乘法法則可知,T(n)=O(n)*O(log2n)=O(nlog2n)。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的408考研数据结构复习-时间复杂度与空间复杂度-附统考真题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。