欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年08月31日 16:57:31   作者:吞吞吐吐大魔王  
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)的時間和空間復(fù)雜度,小編覺得這篇文寫的不錯,感興趣的朋友可以了解下,希望能夠給你帶來幫助

一、算法效率

算法效率分析分為兩種:時間效率和空間效率

時間效率

時間效率被稱為時間復(fù)雜度,主要時衡量一個算法的運行速度

空間效率

空間效率被稱為空間復(fù)雜度,主要衡量一個算法所需要的額外空間

二、時間復(fù)雜度 

1. 概念

一個算法所花費的時間與其中語句的執(zhí)行次數(shù)成正比,故將算法中的基本操作的執(zhí)行次數(shù),作為算法的時間復(fù)雜度

并且時間復(fù)雜度其實還可以分成三種情況:

  • 最壞情況:任意輸入規(guī)模的最大運行次數(shù)
  • 平均情況:任意輸入規(guī)模的期望運行次數(shù)
  • 最好情況:任意輸入規(guī)模的最小運行次數(shù)

而在實際中一般關(guān)注的是算法的最壞運行情況

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

實際在我們計算時間復(fù)雜度時,并不一定要計算精確的執(zhí)行次數(shù),而只需要大概執(zhí)行次數(shù),故我們使用大 O 的漸進(jìn)表示法(大 O 符號是用于描述函數(shù)漸進(jìn)行為的數(shù)學(xué)符號)

使用方法

用常數(shù)1取代運行時間中的所有加法常數(shù)在修改后的運行次數(shù)函數(shù)中,只保留最高階項如果最高階項存在且不為1,則去除與這個項目相乘的常數(shù)

如某個算法的基本操作次數(shù)為 F(N) = N^2^ + 2*N + 10,用大 O 的漸進(jìn)表示法為:O(N)

3. 練習(xí)

在這里放入兩個遞歸函數(shù)的練習(xí),我們來試著推導(dǎo)其的時間復(fù)雜度

練習(xí)一:計算階乘遞歸 factorial 的時間復(fù)雜度

long factorial(int N) {
	return N < 2 ? N : factorial(N-1) * N;
}

這題很簡單,結(jié)果為:O(N)

練習(xí)二:計算斐波那契遞歸 fibonacci 的時間復(fù)雜度

int fibonacci(int N) {
	return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}

這題可以結(jié)合畫圖類似于二叉樹去思考,結(jié)果為:O(N2)

注意

遞歸的時間復(fù)雜度 = 遞歸的次數(shù) * 每次遞歸內(nèi)容要執(zhí)行的次數(shù)

三、空間復(fù)雜度 

1. 概念

空間復(fù)雜度是對一個算法在運行過程中臨時占用存儲空間大小的量度,它不是計算程序占用了多少 byte 的空間,而是計算變量的個數(shù)。(空間復(fù)雜度也使用大 O 的漸進(jìn)表示法)

2. 練習(xí)

練習(xí)一:計算 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;
         }
    }
}

因為只使用了常數(shù)個額外空間,故結(jié)果為:O(1)

練習(xí)二:計算 fibonacci 的空間復(fù)雜度

int[] fibonacci(int n) {
    long[] fibArray = new long[n + 1];
    fibArray[0] = 0;
    fibArray[1] = 1;
    for (int i = 2; i <= n ; i++) {
     	fibArray[i] = fibArray[i - 1] + fibArray [i - 2];
    }
    return fibArray;
}

因為動態(tài)開辟了 N 個空間,故結(jié)果為:O(N)

練習(xí)三:計算階乘遞歸 Factorial 的時間復(fù)雜度

long factorial(int N) {
	return N < 2 ? N : factorial(N-1)*N; 
}

因為遞歸調(diào)用了 N 次,開辟了 N 個棧幀,每個棧幀使用了常數(shù)個空間,故結(jié)果為:O(N)

四、總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • SpringBoot自動裝配之@Import深入講解

    SpringBoot自動裝配之@Import深入講解

    由于最近的項目需求,需要在把配置類導(dǎo)入到容器中,通過查詢,使用@Import注解就能實現(xiàn)這個功能,@Import注解能夠幫我們吧普通配置類(定義為Bean的類)導(dǎo)入到IOC容器中
    2023-01-01
  • Spring MVC注解式開發(fā)示例完整過程

    Spring MVC注解式開發(fā)示例完整過程

    這篇文章主要介紹了Spring MVC注解式開發(fā)示例完整過程,MVC注解式開發(fā)即處理器基于注解的類開發(fā),對于每一個定義的處理器,無需在xml中注冊,只需在代碼中通過對類與方法的注解,即可完成注冊
    2023-02-02
  • Java Enum和String及int的相互轉(zhuǎn)化示例

    Java Enum和String及int的相互轉(zhuǎn)化示例

    這篇文章主要介紹了Java Enum和String及int的相互轉(zhuǎn)化示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 簡單說明Java的Struts框架中merge標(biāo)簽的使用方法

    簡單說明Java的Struts框架中merge標(biāo)簽的使用方法

    這篇文章主要簡單介紹了Java的Struts框架中merge標(biāo)簽的使用方法,Struts是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • SpringBoot+MyBatis實現(xiàn)登錄案例

    SpringBoot+MyBatis實現(xiàn)登錄案例

    前端時間在網(wǎng)上看到有朋友在學(xué)習(xí)springboot項目的搭建過程,今天就抽空給大家分享一個案例幫助大家學(xué)習(xí)SpringBoot+MyBatis實現(xiàn)登錄功能,具體實現(xiàn)代碼跟隨小編一起看看吧
    2021-06-06
  • 關(guān)于SHA算法原理與常用實現(xiàn)方式

    關(guān)于SHA算法原理與常用實現(xiàn)方式

    這篇文章主要介紹了關(guān)于SHA算法原理與常用實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • SpringBoot的@Value給靜態(tài)變量注入application.properties屬性值

    SpringBoot的@Value給靜態(tài)變量注入application.properties屬性值

    這篇文章主要介紹了SpringBoot的@Value給靜態(tài)變量注入application.properties屬性值,Spring是一個開源的框架,主要是用來簡化開發(fā)流程,通過IOC,依賴注入(DI)和面向接口實現(xiàn)松耦合,需要的朋友可以參考下
    2023-05-05
  • Spring AOP詳解面向切面編程思想

    Spring AOP詳解面向切面編程思想

    Spring是一個廣泛應(yīng)用的框架,SpringAOP則是Spring提供的一個標(biāo)準(zhǔn)易用的aop框架,依托Spring的IOC容器,提供了極強的AOP擴(kuò)展增強能力,對項目開發(fā)提供了極大地便利
    2022-06-06
  • JSON.parseObject和JSON.toJSONString實例詳解

    JSON.parseObject和JSON.toJSONString實例詳解

    這篇文章主要為大家詳細(xì)介紹了JSON.parseObject和JSON.toJSONString實例,具有一定的參考價值,感興趣的朋友可以參考一下
    2018-06-06
  • java實現(xiàn)字符串和數(shù)字轉(zhuǎn)換工具

    java實現(xiàn)字符串和數(shù)字轉(zhuǎn)換工具

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)字符串和數(shù)字轉(zhuǎn)換工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04

最新評論