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

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

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

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

??博客主頁(yè):愛(ài)敲代碼的小楊.

?專欄:《Java SE語(yǔ)法》

??感謝大家點(diǎn)贊????收藏?評(píng)論???,您的三連就是我持續(xù)更新的動(dòng)力??

??小楊水平有限,歡迎各位大佬指點(diǎn),相互學(xué)習(xí)進(jìn)步!

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

時(shí)間和空間復(fù)雜度

1. 算法效率

算法效率分為兩種:第一種是時(shí)間效率;第二種是空間效率。時(shí)間效率又稱為時(shí)間復(fù)雜度,而空間效率又稱為空間復(fù)雜度。時(shí)間復(fù)雜度主要衡量的是一個(gè)算法的運(yùn)行速度,而空間復(fù)雜度衡量一個(gè)算法所需要的額外空間。

在計(jì)算機(jī)的發(fā)展的早期,計(jì)算機(jī)的存儲(chǔ)容量很小。所以對(duì)空間復(fù)雜度很是在乎。但是經(jīng)過(guò)計(jì)算機(jī)行業(yè)的迅速發(fā)展,計(jì)算機(jī)的存儲(chǔ)容量已經(jīng)達(dá)到很高的程度。所以我們?nèi)缃癫恍枰貏e關(guān)注空間復(fù)雜度。

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

2.1 時(shí)間復(fù)雜度的概念

時(shí)間復(fù)雜度的定義:算法的時(shí)間復(fù)雜度是一個(gè)數(shù)學(xué)函數(shù),它定量描述了該算法的運(yùn)行時(shí)間。應(yīng)該算法所花費(fèi)的時(shí)間與其中語(yǔ)句執(zhí)行次數(shù)成正比。算法的基本操作的執(zhí)行次數(shù),為算法的時(shí)間復(fù)雜度。

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

// 請(qǐng)計(jì)算一下func1基本操作執(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--) > 0) {
          count++;
     }
     System.out.println(count);
}

Func1 執(zhí)行的基本次數(shù):F(N) = N2 +2 * N + 10

  • N = 10, F(N) = 130;
  • N = 100, F(N) = 10210;
  • N = 1000, F(N) = 1002010;

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

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

2.3 推導(dǎo)大O階方法

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

使用大O的漸進(jìn)表示法以后,Func1的時(shí)間復(fù)雜度為:O(N2)

  • N = 10, F(N) = 100
  • N = 100 ,F(N) = 1000
  • N = 1000, F(N) = 1000000

通過(guò)上面我們會(huì)發(fā)現(xiàn)大0漸進(jìn)表示法去掉了那些對(duì)結(jié)果影響不大的項(xiàng)。簡(jiǎn)潔明了的表示出了執(zhí)行次數(shù)。

另外有些算法的時(shí)間復(fù)雜度存在最好、平均和最壞情況:

  • 最壞情況:任意輸入規(guī)模的最大運(yùn)行次數(shù)(上界)

  • 平均情況:任意輸入規(guī)模的期望運(yùn)行次數(shù)

  • 最好情況:任意輸入規(guī)模的最小運(yùn)行次數(shù)(下界)

在實(shí)際中一般情況關(guān)注的是算法的最壞運(yùn)行情況。

2.4 常見(jiàn)的時(shí)間復(fù)雜度

【例子1】:

// 計(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--) > 0) {
       count++;
  }
   System.out.println(count);
}
/*
	func2基本操作執(zhí)行次數(shù) 2N + 10次
	時(shí)間復(fù)雜度:O(N)
*/

【例子2】:

// 計(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++;
  }
   System.out.println(count);
}
/*	
	func3基本操作次數(shù) M + N 次
	時(shí)間復(fù)雜度:0(M + N)
*/

【例子3】:

// 計(jì)算func4的時(shí)間復(fù)雜度?
void func4(int N) {
   int count = 0;
   for (int k = 0; k < 100; k++) {
       count++;
  }
   System.out.println(count);
}
/*
	func4基本操作次數(shù) 100次
	時(shí)間復(fù)雜度:O(1)
*/

【例子4】:

// 計(jì)算bubbleSort的時(shí)間復(fù)雜度?
void bubbleSort(int[] array) {
   for (int end = array.length; end > 0; end--) {
       boolean sorted = true;
       for (int i = 1; i < end; i++) {
           if (array[i - 1] > array[i]) {
               Swap(array, i - 1, i);
               sorted = false;
          }
      }
   if (sorted == true) {
       break;
   }
 }
/*
	bubbleSort的最好情況為N次,最壞情況為(N * (N - 1) / 2)
	時(shí)間復(fù)雜度為:O(N ^ 2)
*/

【例子5】:

// 計(jì)算binarySearch的時(shí)間復(fù)雜度?
int binarySearch(int[] array, int value) {
   int begin = 0;
   int end = array.length - 1;
   while (begin <= end) {
       int mid = begin + ((end-begin) / 2);
       if (array[mid] < value)
           begin = mid + 1;
       else if (array[mid] > value)
           end = mid - 1;
       else
           return mid;
  }
   return -1;
}
/*
	binarySearch的時(shí)間復(fù)雜度:O(longN)
*/

【例子6】:

// 計(jì)算階乘遞歸factorial的時(shí)間復(fù)雜度?
long factorial(int N) {
	return N < 2 ? N : factorial(N-1) * N;
}
/*
	factorial基本操作遞歸了N次
	時(shí)間復(fù)雜度為O(N)。
*/

【例子7】:

// 計(jì)算斐波那契遞歸?bonacci的時(shí)間復(fù)雜度?
int ?bonacci(int N) {
	return N < 2 ? N : ?bonacci(N-1)+?bonacci(N-2);
}
/*
	?bonacci基本操作遞歸了2^N次,時(shí)間復(fù)雜度為O(2^N)
*/

3. 空間復(fù)雜度

空間復(fù)雜度是對(duì)一個(gè)算法在運(yùn)行過(guò)程中臨時(shí)占用存儲(chǔ)空間大小的量度 。空間復(fù)雜度不是程序占用了多少bytes的空間,因?yàn)檫@個(gè)也沒(méi)太大意義,所以空間復(fù)雜度算的是變量的個(gè)數(shù)。空間復(fù)雜度計(jì)算規(guī)則基本跟時(shí)間復(fù)雜度類似,也使用大O漸進(jìn)表示法。

【例子1】:

// 計(jì)算bubbleSort的空間復(fù)雜度?
void bubbleSort(int[] array) {
   for (int end = array.length; end > 0; end--) {
       boolean sorted = true;
       for (int i = 1; i < end; i++) {
           if (array[i - 1] > array[i]) {
               Swap(array, i - 1, i);
               sorted = false;
          }
      }
      if (sorted == true) {
           break;
      }
  }
}
/*
	bubbleSort使用了常數(shù)個(gè)額外空間
	空間復(fù)雜度為 O(1)
*/

【例子2】:

// 計(jì)算?bonacci的空間復(fù)雜度?
int[] ?bonacci(int n) {
   long[] ?bArray = new long[n + 1];
   ?bArray[0] = 0;
   ?bArray[1] = 1;
   for (int i = 2; i <= n ; i++) {
       ?bArray[i] = ?bArray[i - 1] + ?bArray [i - 2];
   }
   return ?bArray;
}
/*
	?bonacci動(dòng)態(tài)開(kāi)辟了N個(gè)空間
	空間復(fù)雜度為 O(N)
*/

【例子3】:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-809504.html

// 計(jì)算階乘遞歸Factorial的空間復(fù)雜度?
long factorial(int N) {
    return N < 2 ? N : factorial(N-1)*N;
}
/*
	factorial遞歸調(diào)用了N次,開(kāi)辟了N個(gè)棧幀,每個(gè)棧幀使用了常數(shù)個(gè)空間。
	空間復(fù)雜度為O(N)
*/

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

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

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

相關(guān)文章

  • 【數(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對(duì)數(shù)階 常見(jiàn)的時(shí)間復(fù)雜度排序: 三、空間復(fù)雜度 3.1Java的基本類型內(nèi)存占用 數(shù)據(jù)結(jié)構(gòu)和算法是程序的靈魂,這是某位程序員大佬所言,學(xué)習(xí)了這門,我們便可

    2023年04月09日
    瀏覽(24)
  • 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):算法的時(shí)間復(fù)雜度和空間復(fù)雜度

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

    衡量一個(gè)算法的好壞,一般是從時(shí)間和空間兩個(gè)維度來(lái)衡量的,即時(shí)間復(fù)雜度和空間復(fù)雜度。 時(shí)間復(fù)雜度主要衡量一個(gè)算法的運(yùn)行快慢,而空間復(fù)雜度主要衡量一個(gè)算法運(yùn)行所需要的額外空間。 算法的時(shí)間復(fù)雜度 算法中的基本操作的執(zhí)行次數(shù),為算法的時(shí)間復(fù)雜度。 算法的

    2024年04月11日
    瀏覽(24)
  • 數(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ī)存儲(chǔ)、組織數(shù)據(jù)的方式,指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。 算法(Algorithm):就是定義良好的計(jì)算過(guò)程,他取一個(gè)或一組的值為輸入,并產(chǎn)生出一個(gè)或一組值作為輸出。簡(jiǎn)單來(lái)說(shuō)算法就是一系列的計(jì)算步驟,用來(lái)將輸入數(shù)據(jù)轉(zhuǎn)

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

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

    ??博客主頁(yè):愛(ài)敲代碼的小楊. ?專欄:《Java SE語(yǔ)法》 ??感謝大家點(diǎn)贊????收藏?評(píng)論???,您的三連就是我持續(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.常見(jiàn)復(fù)雜度對(duì)比 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ù)雜度

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

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

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

    ??博客主頁(yè): 小鎮(zhèn)敲碼人 ?? 歡迎關(guān)注:??點(diǎn)贊 ????留言 ??收藏 ??友友們暑假快樂(lè),好久不見(jiàn)呀?。。?????? ?? 有人曾經(jīng)問(wèn)過(guò)我這樣一個(gè)問(wèn)題,“人終其一身,執(zhí)著追求的東西究竟是什么?”我是這樣回答的,”我們終其一生都在尋找著那個(gè)和我們靈魂極其契合

    2024年02月12日
    瀏覽(27)
  • 從頭開(kāi)始:數(shù)據(jù)結(jié)構(gòu)和算法入門(時(shí)間復(fù)雜度、空間復(fù)雜度)

    從頭開(kāi)始:數(shù)據(jù)結(jié)構(gòu)和算法入門(時(shí)間復(fù)雜度、空間復(fù)雜度)

    ? ? 目錄 文章目錄 前言 1.算法效率 1.1 如何衡量一個(gè)算法的好壞 1.2 算法的復(fù)雜度 2.時(shí)間復(fù)雜度? 2.1 時(shí)間復(fù)雜度的概念 2.2 大O的漸進(jìn)表示法 2.3常見(jiàn)時(shí)間復(fù)雜度計(jì)算 3.空間復(fù)雜度 4.常見(jiàn)復(fù)雜度對(duì)比 總結(jié) 前言 ????????C語(yǔ)言的學(xué)習(xí)篇已經(jīng)結(jié)束,今天開(kāi)啟新的篇章——數(shù)據(jù)結(jié)構(gòu)

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

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

    ??個(gè)人主頁(yè):_麥麥_ ??今日名言: 生命中曾經(jīng)有過(guò)的所有燦爛,都終究需要用寂寞來(lái)償還。 ——《百年孤獨(dú)》 目錄 一、前言 二、正文 ? ? ? ? 1.算法效率 ? ? ? ? ? ? ? ? 1.1如何衡量一個(gè)算法的好壞 ? ? ? ? ????????1.2算法的復(fù)雜度 ? ? ? ? 2.?時(shí)間復(fù)雜度 ? ? ?

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

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

    目錄 前言: 1.時(shí)間復(fù)雜度 1.1時(shí)間復(fù)雜度的理解 1.2規(guī)模與基本操作執(zhí)行次數(shù) 1.3大O漸進(jìn)表示法 1.4計(jì)算基本操作的次數(shù) 2.常見(jiàn)的時(shí)間復(fù)雜度及其優(yōu)劣比較 ?博主CSDN:啊蘇要學(xué)習(xí) ? ? ?專欄分類:數(shù)據(jù)結(jié)構(gòu)? ? 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)是一件有趣的事情,希望讀者能在我的博文切實(shí)感受到

    2024年02月05日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包