最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度

 更新時(shí)間:2022年05月04日 12:43:28   投稿:hqx  
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度,文章基于c語(yǔ)言的相關(guān)資料展開(kāi)詳細(xì)介紹,具有一定的參價(jià)值,需要的小伙伴可以參考一下

1、算法的復(fù)雜度

算法在編寫(xiě)成可執(zhí)行程序后,運(yùn)行時(shí)需要耗費(fèi)時(shí)間資源和空間(內(nèi)存)資源 。因此衡量一個(gè)算法的好壞,一般是從時(shí)間和空間兩個(gè)維度來(lái)衡量的,即時(shí)間復(fù)雜度和空間復(fù)雜度。

時(shí)間復(fù)雜度主要衡量一個(gè)算法的運(yùn)行快慢,而空間復(fù)雜度主要衡量一個(gè)算法運(yùn)行所需要的額外空間。在計(jì)算機(jī)發(fā)展的早期,計(jì)算機(jī)的存儲(chǔ)容量很小。所以對(duì)空間復(fù)雜度很是在乎。但是經(jīng)過(guò)計(jì)算機(jī)行業(yè)的迅速發(fā)展,計(jì)算機(jī)的存儲(chǔ)容量已經(jīng)達(dá)到了很高的程度。所以我們?nèi)缃褚呀?jīng)不需要再特別關(guān)注一個(gè)算法的空間復(fù)雜度。(本篇文章主要討論時(shí)間復(fù)雜度)

2、時(shí)間復(fù)雜度

2.1 時(shí)間復(fù)雜度的定義

時(shí)間復(fù)雜度的定義:在計(jì)算機(jī)科學(xué)中,算法的時(shí)間復(fù)雜度是一個(gè)函數(shù),它定量描述了該算法的運(yùn)行時(shí)間。一個(gè)算法執(zhí)行所耗費(fèi)的時(shí)間,從理論上說(shuō),是不能算出來(lái)的,只有你把你的程序放在機(jī)器上跑起來(lái),才能知道。但是我們需要每個(gè)算法都上機(jī)測(cè)試嗎?是可以都上機(jī)測(cè)試,但是這很麻煩,所以才有了時(shí)間復(fù)雜度這個(gè)分析方式。一個(gè)算法所花費(fèi)的時(shí)間與其中語(yǔ)句的執(zhí)行次數(shù)成正比例,算法中的基本操作的執(zhí)行次數(shù),為算法的時(shí)間復(fù)雜度。

舉例:

請(qǐng)計(jì)算一下Func1中++count語(yǔ)句總共執(zhí)行了多少次?

void Func1(int N)
{
int count = 0;
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < N; ++j)
{
++count;
}
}
for (int k = 0; k < 2 * N; ++k)
{
++count;
}
int M = 10;
while (M--)
{
++count;
}
printf("%d\n", count);
}

時(shí)間復(fù)雜度函數(shù):F(N)=N*N+2*N+10 

 實(shí)際中我們計(jì)算時(shí)間復(fù)雜度時(shí),我們其實(shí)并不一定要計(jì)算精確的執(zhí)行次數(shù),而只需要大概執(zhí)行次數(shù),那么這里我們使用大O的漸進(jìn)表示法。

2.2 大O的漸進(jìn)表示法

大O符號(hào)(Big O notation):是用于描述函數(shù)漸進(jìn)行為的數(shù)學(xué)符號(hào)

1、用1來(lái)代替常數(shù),F(N)函數(shù)只有常數(shù)  O(1)
2、在運(yùn)行次數(shù)中,只保留最高階。 F(N)=N^3+N^2  --> O(N^3)
3、最高項(xiàng)系數(shù)化為1。F(N) = 2*N  --> O(N)

 注:復(fù)雜度不固定時(shí),時(shí)間復(fù)雜度看的是最壞的情況(悲觀(guān)的估算)

例如:在一個(gè)長(zhǎng)度為N數(shù)組中搜索一個(gè)數(shù)據(jù)x

  • 最好情況:1次找到
  • 最壞情況:N次找到
  • 平均情況:N/2次找到

在實(shí)際中一般情況關(guān)注的是算法的最壞運(yùn)行情況,所以數(shù)組中搜索數(shù)據(jù)時(shí)間復(fù)雜度為O(N)

3、常見(jiàn)時(shí)間復(fù)雜度計(jì)算舉例

3.1 冒泡排序的時(shí)間復(fù)雜度

void BubbleSort(int* a, int n)
{
assert(a);
for (size_t end = n; end > 0; --end)
{
int exchange = 0;
for (size_t i = 1; i < end; ++i)
{
if (a[i - 1] > a[i])
{
Swap(&a[i - 1], &a[i]);
exchange = 1;
}
}
if (exchange == 0)
break;
}
}

 經(jīng)分析的:F(N)= O(N^2)

3.2 二分查找的時(shí)間復(fù)雜度

//左閉右開(kāi)
int BinarySearch(int* a, int n, int x)
{
assert(a);
int begin = 0;
int end = n ;
while (begin < end)
{
int mid = begin + ((end - begin) >> 1);
if (a[mid] < x)
begin = mid + 1;
else if (a[mid] > x)
end = mid;
else
return mid;
}
return -1;
}

//左閉右閉
int BinarySearch(int* a, int n, int x)
{
assert(a);
int begin = 0;
int end = n-1;
while (begin <= end)
{
int mid = begin + ((end - begin) >> 1);
if (a[mid] < x)
begin = mid + 1;
else if (a[mid] > x)
end = mid-1;
else
return mid;
}
return -1;
}

假設(shè)找了x次:

1*2*2*2*2......*2 = N 

2^x = N

x = log2 N

最壞:O(log2 N)  簡(jiǎn)寫(xiě)成 log(N)

3.3 階乘(遞歸)的時(shí)間復(fù)雜度

  • 1、每次函數(shù)調(diào)用是O(1),那么就要看他的遞歸次數(shù)。
  • 2、每次函數(shù)調(diào)用不是O(n),那么就看他的遞歸調(diào)用中次數(shù)的累加。
long long Fac(size_t N)
{
if (0 == N)
return 1;
return Fac(N - 1) * N;
}

 F(N) = O(N)

3.4菲波那切數(shù)列的時(shí)間復(fù)雜度

long long Fib(size_t N)
{
if (N < 3)
return 1;
return Fib(N - 1) + Fib(N - 2);
}

通過(guò)計(jì)算分析發(fā)現(xiàn)基本操作遞歸了2^N次,時(shí)間復(fù)雜度為O(2^N)。

到此這篇關(guān)于C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度的文章就介紹到這了,更多相關(guān)c語(yǔ)言算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • AVX2指令集浮點(diǎn)乘法性能分析

    AVX2指令集浮點(diǎn)乘法性能分析

    這篇文章主要為大家介紹了AVX2指令集浮點(diǎn)乘法性能分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C語(yǔ)言自定義類(lèi)型的保姆級(jí)講解

    C語(yǔ)言自定義類(lèi)型的保姆級(jí)講解

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言自定義類(lèi)型的保姆級(jí)講解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C++ 互斥鎖原理以及實(shí)際使用介紹

    C++ 互斥鎖原理以及實(shí)際使用介紹

    本文主要聊一聊如何使用互斥鎖以及都有哪幾種方式實(shí)現(xiàn)互斥鎖。實(shí)現(xiàn)互斥,可以有以下幾種方式:互斥量(Mutex)、遞歸互斥量(Recursive Mutex)、讀寫(xiě)鎖(Read-Write Lock)、條件變量(Condition Variable)。感興趣的同學(xué)可以參考一下
    2023-04-04
  • C++標(biāo)準(zhǔn)庫(kù)介紹及使用string類(lèi)的詳細(xì)過(guò)程

    C++標(biāo)準(zhǔn)庫(kù)介紹及使用string類(lèi)的詳細(xì)過(guò)程

    C++中將string封裝為單獨(dú)的類(lèi),string?類(lèi)是?C++?標(biāo)準(zhǔn)庫(kù)中的一個(gè)非常重要的類(lèi),用于表示和操作字符串,這篇文章主要介紹了C++標(biāo)準(zhǔn)庫(kù)介紹及使用string類(lèi),需要的朋友可以參考下
    2024-08-08
  • C語(yǔ)言實(shí)現(xiàn)無(wú)頭單鏈表詳解

    C語(yǔ)言實(shí)現(xiàn)無(wú)頭單鏈表詳解

    大家好,本篇文章主要講的是C語(yǔ)言實(shí)現(xiàn)無(wú)頭單鏈表詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下
    2022-02-02
  • C++實(shí)現(xiàn)String類(lèi)實(shí)例代碼

    C++實(shí)現(xiàn)String類(lèi)實(shí)例代碼

    這篇文章主要介紹了C++實(shí)現(xiàn)String類(lèi)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 簡(jiǎn)易Dota改鍵程序制作

    簡(jiǎn)易Dota改鍵程序制作

    利用全局鉤子制作一個(gè)個(gè)性化的dota游戲改鍵功能,大家可以參考使用
    2013-11-11
  • C語(yǔ)言實(shí)現(xiàn)AT指令A(yù)SCII碼的拼接處理流程

    C語(yǔ)言實(shí)現(xiàn)AT指令A(yù)SCII碼的拼接處理流程

    今天小編就為大家分享一篇關(guān)于C語(yǔ)言實(shí)現(xiàn)AT指令A(yù)SCII碼的拼接處理流程,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • C++讀寫(xiě)Excel的實(shí)現(xiàn)方法詳解

    C++讀寫(xiě)Excel的實(shí)現(xiàn)方法詳解

    本篇文章是對(duì)C++讀寫(xiě)Excel的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++優(yōu)先隊(duì)列的使用小結(jié)

    C++優(yōu)先隊(duì)列的使用小結(jié)

    普通的隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),元素在隊(duì)列尾追加,而從隊(duì)列頭刪除,在優(yōu)先隊(duì)列中,元素被賦予優(yōu)先級(jí),本文主要介紹了C++優(yōu)先隊(duì)列的使用,感興趣的可以了解一下
    2023-11-11

最新評(píng)論

巴马| 康乐县| 阜城县| 柳林县| 哈巴河县| 乐山市| 壤塘县| 克山县| 丁青县| 嘉黎县| 酉阳| 固安县| 乐东| 东城区| 册亨县| 长岛县| 西峡县| 枝江市| 宣化县| 天等县| 徐州市| 绥化市| 阿拉善左旗| 吉首市| 岳西县| 宁德市| 霍林郭勒市| 永济市| 安仁县| 钦州市| 高碑店市| 班玛县| 都江堰市| 太仆寺旗| 潜江市| 潼关县| 绥芬河市| 台北市| 宝应县| 安乡县| 宁明县|