国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):算法的時(shí)間復(fù)雜度和空間復(fù)雜度

這篇具有很好參考價(jià)值的文章主要介紹了學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):算法的時(shí)間復(fù)雜度和空間復(fù)雜度。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

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

衡量一個(gè)算法的好壞,一般是從時(shí)間和空間兩個(gè)維度來衡量的,即時(shí)間復(fù)雜度和空間復(fù)雜度。

時(shí)間復(fù)雜度主要衡量一個(gè)算法的運(yùn)行快慢,而空間復(fù)雜度主要衡量一個(gè)算法運(yùn)行所需要的額外空間。

算法的時(shí)間復(fù)雜度

算法中的基本操作的執(zhí)行次數(shù),為算法的時(shí)間復(fù)雜度。

算法的空間復(fù)雜度

空間復(fù)雜度主要通過函數(shù)在運(yùn)行時(shí)候顯式申請的額外空間來確定。

?時(shí)間復(fù)雜度和空間復(fù)雜度都是由大O的漸近表示法來表示

推導(dǎo)大O階方法:
1、用常數(shù)1取代運(yùn)行時(shí)間中的所有加法常數(shù)。
2、在修改后的運(yùn)行次數(shù)函數(shù)中,只保留最高階項(xiàng)。
3、如果最高階項(xiàng)存在且不是1,則去除與這個(gè)項(xiàng)目相乘的常數(shù)。得到的結(jié)果就是大O階。

?二、常見復(fù)雜度對比

學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):算法的時(shí)間復(fù)雜度和空間復(fù)雜度,數(shù)據(jù)結(jié)構(gòu)C語言版,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí)

學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):算法的時(shí)間復(fù)雜度和空間復(fù)雜度,數(shù)據(jù)結(jié)構(gòu)C語言版,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí)

?三、常見的時(shí)間復(fù)雜度和空間復(fù)雜度的計(jì)算

一、時(shí)間復(fù)雜度計(jì)算舉例

// 計(jì)算Func2的時(shí)間復(fù)雜度?
void Func2(int N)
{
int count = 0;
for (int k = 0; k < 2 * N ; ++ k)
{
++count;
}
int M = 10;
while (M--)
{
++count;
}
printf("%d\n", count);
}

?O(N*2+10),F(xiàn)unc2的時(shí)間復(fù)雜度為O(N)

// 計(jì)算Func3的時(shí)間復(fù)雜度?
void Func3(int N, int M)
{
int count = 0;
for (int k = 0; k < M; ++ k)
{
++count;
}
for (int k = 0; k < N ; ++ k)
{
++count;
}
printf("%d\n", count);
}

O(M+N),若M>>N 則時(shí)間復(fù)雜度為 O(M),反之則為O(N).

? ? ? ? ? ? ? 若M==N則時(shí)間復(fù)雜度為O(N)或O(M).

// 計(jì)算Func4的時(shí)間復(fù)雜度?
void Func4(int N)
{
int count = 0;
for (int k = 0; k < 100; ++ k)
{
++count;
}
printf("%d\n", count);
}

?O(1)

// 計(jì)算BubbleSort的時(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;
}
}

O((N+1)*(N)/2)? ?時(shí)間復(fù)雜度為O(N^2)

// 計(jì)算BinarySearch的時(shí)間復(fù)雜度?
int BinarySearch(int* a, int n, int x)
{
assert(a);
int begin = 0;
int end = n-1;
// [begin, end]:begin和end是左閉右閉區(qū)間,因此有=號
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;
}

二分查找? O(logn);ps:logN在算法分析中表示是底數(shù)為2,對數(shù)為N。

// 計(jì)算階乘遞歸Fac的時(shí)間復(fù)雜度?
long long Fac(size_t N)
{
if(0 == N)
return 1;
return Fac(N-1)*N;
}

O(N)

// 計(jì)算斐波那契遞歸Fib的時(shí)間復(fù)雜度?
long long Fib(size_t N)
{
if(N < 3)
return 1;
return Fib(N-1) + Fib(N-2);
}

學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):算法的時(shí)間復(fù)雜度和空間復(fù)雜度,數(shù)據(jù)結(jié)構(gòu)C語言版,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí)

?O(logN)

?二、空間復(fù)雜度計(jì)算舉例

// 計(jì)算BubbleSort的空間復(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;
}
}

空間復(fù)雜度O(1),開了常數(shù)個(gè)

// 計(jì)算Fibonacci的空間復(fù)雜度?
// 返回斐波那契數(shù)列的前n項(xiàng)
long long* Fibonacci(size_t n)
{
if(n==0)
return NULL;
long long * fibArray = (long long *)malloc((n+1) * sizeof(long long));
fibArray[0] = 0;
fibArray[1] = 1;
for (int i = 2; i <= n ; ++i)
{
fibArray[i] = fibArray[i - 1] + fibArray [i - 2];
}
return fibArray;
}

O(N)

// 計(jì)算階乘遞歸Fac的空間復(fù)雜度?
long long Fac(size_t N)
{
if(N == 0)
return 1;
return Fac(N-1)*N;
}

O(N)

四、復(fù)雜度的oj練習(xí)

一、消失的數(shù)字

. - 力扣(LeetCode). - 備戰(zhàn)技術(shù)面試?力扣提供海量技術(shù)面試資源,幫助你高效提升編程技能,輕松拿下世界 IT 名企 Dream Offer。https://leetcode-cn.com/problems/missing-number-lcci學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):算法的時(shí)間復(fù)雜度和空間復(fù)雜度,數(shù)據(jù)結(jié)構(gòu)C語言版,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí)

大家看這道題是不是感覺有些熟悉呢??

有沒有想到之前的那個(gè)單身狗問題呢?

這個(gè)題也跟那個(gè)題類似,先定義一個(gè)int類數(shù),然后先與n個(gè)數(shù)異或,再與數(shù)組中的數(shù)異或

最后這個(gè)數(shù)就是數(shù)組中缺少的值.

因?yàn)?^1=0

int missingNumber(int* nums, int numsSize){
  int num=0;
  for(int i=0;i<=numsSize;i++){
    num^=i;
  }
  for(int i=0;i<numsSize;i++){
    num^=nums[i];
  }
  return num;
}
int missingNumber(int* nums, int numsSize){
  int num=0;
  for(int i=0;i<=numsSize;i++){
    num+=i;
  }
  for(int i=0;i<numsSize;i++){
    num-=nums[i];
  }
  return num;
}

二、旋轉(zhuǎn)數(shù)組

. - 力扣(LeetCode). - 備戰(zhàn)技術(shù)面試?力扣提供海量技術(shù)面試資源,幫助你高效提升編程技能,輕松拿下世界 IT 名企 Dream Offer。https://leetcode-cn.com/problems/rotate-array學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):算法的時(shí)間復(fù)雜度和空間復(fù)雜度,數(shù)據(jù)結(jié)構(gòu)C語言版,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí)

?這個(gè)題有兩種思路:

思路一:先將n-k個(gè)逆置,再將后k個(gè)逆置,最后直接整體逆置。(妙?。。。。?/p>

void rotate(int* nums, int numsSize, int k) {
    k%=numsSize;
    int tmp[numsSize];
    int n=numsSize;
    memcpy(tmp,nums+n-k,sizeof(int)*k);
    memcpy(tmp+k,nums,sizeof(int)*(n-k));
    memcpy(nums,tmp,sizeof(int)*(n));
}

?

void Reverse(int*a,int left,int right){
    int tmp=a[left];
    a[left]=a[right];
    a[right]=tmp;
    right--;
    left++;
}
void rotate(int* nums, int numsSize, int k) {
    k%=numsSize;
    //[0,numssize-k-1]
   Reverse(nums,0,numsSize-k-1);
   //[numssize-k,numssize-1]
   Reverse(nums,numsSize-k,numsSize-1);
   Reverse(nums,0,numsSize-1);
}
今天的內(nèi)容就到此位置了,謝謝各位大佬觀看?。。?

學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):算法的時(shí)間復(fù)雜度和空間復(fù)雜度,數(shù)據(jù)結(jié)構(gòu)C語言版,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí)文章來源地址http://www.zghlxwxcb.cn/news/detail-847886.html

到了這里,關(guān)于學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):算法的時(shí)間復(fù)雜度和空間復(fù)雜度的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 算法的時(shí)間復(fù)雜度和空間復(fù)雜度(數(shù)據(jù)結(jié)構(gòu))

    算法的時(shí)間復(fù)雜度和空間復(fù)雜度(數(shù)據(jù)結(jié)構(gòu))

    目錄 1、算法效率 1如何衡量一個(gè)算法的好壞 2算法的復(fù)雜度 2、時(shí)間復(fù)雜度 1時(shí)間復(fù)雜度的概念 2大O的漸進(jìn)表示法 2時(shí)間復(fù)雜度計(jì)算例題 1、計(jì)算Func2的時(shí)間復(fù)雜度 2、計(jì)算Func3的時(shí)間復(fù)雜度 3、計(jì)算Func4的時(shí)間復(fù)雜度 4、計(jì)算strchr的時(shí)間復(fù)雜度 5、計(jì)算BubbleSort的時(shí)間復(fù)雜度 6、計(jì)算

    2024年02月03日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)與算法—時(shí)間復(fù)雜度和空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)與算法—時(shí)間復(fù)雜度和空間復(fù)雜度

    目錄 1、什么是數(shù)據(jù)結(jié)構(gòu)? 2、什么是算法? 3、算法的復(fù)雜度 4、時(shí)間復(fù)雜度 (1) 時(shí)間復(fù)雜度的概念: ?(2) 大O的漸進(jìn)表示法:? 六個(gè)例題: (3)?時(shí)間復(fù)雜度對比:? 三個(gè)例題:? OJ題分析時(shí)間復(fù)雜度 5、空間復(fù)雜度 (1)常見復(fù)雜度對比 ?(2)OJ題分析空間復(fù)雜度 小結(jié) 數(shù)據(jù)結(jié)構(gòu) (D

    2024年02月07日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)--算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)--算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    算法效率是指 算法在計(jì)算機(jī)上運(yùn)行時(shí)所消耗的時(shí)間和資源 。這是衡量算法執(zhí)行速度和資源利用情況的重要指標(biāo)。 例子: 這是一個(gè)斐波那契函數(shù),用的是遞歸的計(jì)算方法,每次創(chuàng)建函數(shù)就會在棧區(qū)開辟一塊空間,遞歸次數(shù)越多,開辟空間越多; 所以, 代碼的簡潔說明不了算

    2024年02月15日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)與算法-時(shí)間復(fù)雜度與空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)與算法-時(shí)間復(fù)雜度與空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲、組織數(shù)據(jù)的方式,指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。 算法就是定義良好的計(jì)算過程,他取一個(gè)或一組的值為輸入,并產(chǎn)生一個(gè)或一組值作為輸出。簡單來說算法就是一系列的計(jì)算步驟,用來將輸入數(shù)據(jù)轉(zhuǎn)化成輸出結(jié)果。 算法在

    2024年02月07日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法】時(shí)間復(fù)雜度和空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)和算法】時(shí)間復(fù)雜度和空間復(fù)雜度

    目錄 ? 一、前言 二、時(shí)間復(fù)雜度 2.1時(shí)間復(fù)雜度表示形式 2.1.1規(guī)則: 3.1如何計(jì)算時(shí)間復(fù)雜度 3.1.1線性階 3.1.2平方階 3.1.3對數(shù)階 常見的時(shí)間復(fù)雜度排序: 三、空間復(fù)雜度 3.1Java的基本類型內(nèi)存占用 數(shù)據(jù)結(jié)構(gòu)和算法是程序的靈魂,這是某位程序員大佬所言,學(xué)習(xí)了這門,我們便可

    2023年04月09日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】1.時(shí)間復(fù)雜度和空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)與算法】1.時(shí)間復(fù)雜度和空間復(fù)雜度

    ??博客主頁:愛敲代碼的小楊. ?專欄:《Java SE語法》 ??感謝大家點(diǎn)贊????收藏?評論???,您的三連就是我持續(xù)更新的動(dòng)力?? ??小楊水平有限,歡迎各位大佬指點(diǎn),相互學(xué)習(xí)進(jìn)步! 算法效率分為兩種:第一種是時(shí)間效率;第二種是空間效率。時(shí)間效率又稱為時(shí)間

    2024年01月20日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法篇】時(shí)間復(fù)雜度與空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)與算法篇】時(shí)間復(fù)雜度與空間復(fù)雜度

    ?? 目錄 一、數(shù)據(jù)結(jié)構(gòu)和算法 1.什么是數(shù)據(jù)結(jié)構(gòu)?? 2.什么是算法? 3.數(shù)據(jù)結(jié)構(gòu)和算法的重要性 二、算法的時(shí)間復(fù)雜度和空間復(fù)雜度 1.算法效率 2.算法的復(fù)雜度 3.復(fù)雜度在校招中的考察 4.時(shí)間復(fù)雜度 5.空間復(fù)雜度? 6.常見復(fù)雜度對比 7.復(fù)雜度的OJ練習(xí) ? ??內(nèi)容專欄:《數(shù)據(jù)結(jié)

    2023年04月24日
    瀏覽(44)
  • 數(shù)據(jù)結(jié)構(gòu) | 算法的時(shí)間復(fù)雜度和空間復(fù)雜度【詳解】

    數(shù)據(jù)結(jié)構(gòu) | 算法的時(shí)間復(fù)雜度和空間復(fù)雜度【詳解】

    數(shù)據(jù)結(jié)構(gòu)(Data Structure)是計(jì)算機(jī)存儲、組織數(shù)據(jù)的方式,指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。 算法(Algorithm):就是定義良好的計(jì)算過程,他取一個(gè)或一組的值為輸入,并產(chǎn)生出一個(gè)或一組值作為輸出。簡單來說算法就是一系列的計(jì)算步驟,用來將輸入數(shù)據(jù)轉(zhuǎn)

    2024年02月08日
    瀏覽(30)
  • 數(shù)據(jù)結(jié)構(gòu)練習(xí)-算法與時(shí)間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)練習(xí)-算法與時(shí)間復(fù)雜度

    -----------------------------------------------------------------------------------------------------------------------------? ????????1. 設(shè)n是描述問題規(guī)模的非負(fù)整數(shù),下列程序段的時(shí)間復(fù)雜度是( )。 ????????A.O(logn) B.O(n^(1/2)) C.O(n) D.O(n2) ? ? ? ? 解析: ? ? ? ? 分析選項(xiàng) A. O(log n) :這通常描

    2024年04月25日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)初階】算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    1.1 如何衡量一個(gè)算法的好壞 如何衡量一個(gè)算法的好壞呢? 比如對于以下斐波那契數(shù)列: 斐波那契數(shù)列的遞歸實(shí)現(xiàn)方式非常簡潔,但簡潔一定好嗎?那該如何衡量其好與壞呢? 1.2 算法的復(fù)雜度 算法在編寫成可執(zhí)行程序后,運(yùn)行時(shí)需要耗費(fèi)時(shí)間資源和空間(內(nèi)存)資源 。因此

    2024年02月08日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包