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

Java中的時(shí)間和空間復(fù)雜度詳解

 更新時(shí)間:2025年12月26日 09:08:57   作者:月下清融析愿  
文章主要介紹了如何衡量算法的好壞,包括時(shí)間效率和空間效率,時(shí)間效率用時(shí)間復(fù)雜度衡量,空間效率用空間復(fù)雜度衡量,時(shí)間復(fù)雜度通過大O漸進(jìn)表示法進(jìn)行分析,空間復(fù)雜度也使用大O漸進(jìn)表示法,文章還列舉了一些常見的時(shí)間復(fù)雜度計(jì)算例子,并介紹了如何計(jì)算空間復(fù)雜度

一,如何衡量一個(gè)算法的好壞

答:看時(shí)間效率和空間效率

二,算法效率

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

三,時(shí)間復(fù)雜度

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

時(shí)間復(fù)雜度的定義:在計(jì)算機(jī)科學(xué)中,算法的時(shí)間復(fù)雜度是一個(gè)數(shù)學(xué)函數(shù),它定量描述了該算法的運(yùn)行時(shí)間。

一個(gè)算法執(zhí)行所耗費(fèi)的時(shí)間,從理論上說,是不能算出來的,只有你把你的程序放在機(jī)器上跑起來,才能知道。但是我們需要每個(gè)算法都上機(jī)測(cè)試嗎?

是可以都上機(jī)測(cè)試,但是這很麻煩,所以才有了時(shí)間復(fù)雜度這個(gè)分析方式。

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

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

Func1 執(zhí)行的基本操作次數(shù) :

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

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

3,推導(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ù)(系數(shù))。得到的結(jié)果就是大O階。

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

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

平時(shí)所說的時(shí)間復(fù)雜度或空間復(fù)雜度,都是指在 最壞情況下的 時(shí)間復(fù)雜度

那么平均時(shí)間復(fù)雜度怎么算,我這里給個(gè)例子,大家了解一下就行

4,常見時(shí)間復(fù)雜度計(jì)算舉例

求復(fù)雜度 一定要結(jié)合 算法的思想

  • 例1    O(N)

  • 例2    O(M+N)

  • 例3    O(100)  寫作100即可

  • 例4     O(1/2*n^2 - 1/2*n) -> O(n^2)[最壞情況每次都要交換,即逆序]

最好情況是執(zhí)行一輪 O(N)

  • 例5    0()    最好情況就是在中間的時(shí)候,一次直接找到,就是1

這是二分查找,最壞情況就是最后一次才找到

第一次:  n/2^1 第二次:  n/2^2  ....  .....  第x次:  n/2^x = 1 (最后要找的那個(gè)數(shù)據(jù)看作1)

對(duì)第x次進(jìn)行等式變形:n = 2^x -> x =

 

  • 例6      O(N)

遞歸的時(shí)間復(fù)雜度 = 遞歸的次數(shù) * 每次遞歸執(zhí)行的次數(shù)

這個(gè)題目 每次遞歸執(zhí)行的次數(shù)是 1 ,因?yàn)?三目運(yùn)算符 無(wú)論結(jié)果如何實(shí)際上只運(yùn)行一次

所以 時(shí)間復(fù)雜度為 O(N-1) - > O(N)

  • 例7    O(2^N)

先了解一下 什么是 斐波那契數(shù)列

實(shí)際上,通過其遞歸公式我們可以得出這樣的一個(gè)式子

2^0 + 2^1 + 2^2 + ... ... + 2^(N-2) + 2^ (N-1) = S(n)

下圖是主播簡(jiǎn)單的推導(dǎo)

這是一個(gè)等比數(shù)列

等比數(shù)列求和= S(n) = 2^n - 1

則 時(shí)間復(fù)雜度為 O(2^N)

5,以后常遇到的復(fù)雜度

O(1)    <   O(logN)[默認(rèn)以2為底]    <  O(N)    <    O(N*logN)    <   O(N^2)

四,空間復(fù)雜度

空間復(fù)雜度是對(duì)一個(gè)算法在運(yùn)行過程中臨時(shí)占用存儲(chǔ)空間大小的量度

空間復(fù)雜度不是程序占用了多少bytes的空間,因?yàn)檫@個(gè)也沒太大意義,所以空間復(fù)雜度算的是變量的個(gè)數(shù)。

空間復(fù)雜度計(jì)算規(guī)則基本跟時(shí)間復(fù)雜度類似,也使用O漸進(jìn)表示法。

計(jì)算舉例:

冒泡排序的空間復(fù)雜度是O(1)

斐波那契數(shù)列動(dòng)態(tài)開辟了N個(gè)空間,空間復(fù)雜度是O(N)

遞歸調(diào)用了N次,開辟了N個(gè)棧幀,每個(gè)棧幀使用了常數(shù)個(gè)空間??臻g復(fù)雜度為O(N)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java編程實(shí)現(xiàn)軌跡壓縮之Douglas-Peucker算法詳細(xì)代碼

    Java編程實(shí)現(xiàn)軌跡壓縮之Douglas-Peucker算法詳細(xì)代碼

    這篇文章主要介紹了Java編程實(shí)現(xiàn)軌跡壓縮之Douglas-Peucker算法詳細(xì)代碼,具有一定借鑒價(jià)值,需要的朋友可以參考。
    2017-11-11
  • Java實(shí)現(xiàn)TCP和UDP協(xié)議詳解

    Java實(shí)現(xiàn)TCP和UDP協(xié)議詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)TCP和UDP協(xié)議詳解,TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)是兩種最常用的傳輸層協(xié)議,它們都用于在網(wǎng)絡(luò)上傳輸數(shù)據(jù),但是它們之間有很多不同之處,需要的朋友可以參考下
    2023-07-07
  • Spring?Boot?使用?SSE?方式向前端推送數(shù)據(jù)詳解

    Spring?Boot?使用?SSE?方式向前端推送數(shù)據(jù)詳解

    這篇文章主要介紹了Spring?Boot?使用SSE方式向前端推送數(shù)據(jù)詳解,SSE簡(jiǎn)單的來說就是服務(wù)器主動(dòng)向前端推送數(shù)據(jù)的一種技術(shù),它是單向的,也就是說前端是不能向服務(wù)器發(fā)送數(shù)據(jù)的
    2022-08-08
  • java實(shí)現(xiàn)寫入并保存txt文件的代碼詳解

    java實(shí)現(xiàn)寫入并保存txt文件的代碼詳解

    在本篇文章里小編給大家整理了關(guān)于java實(shí)現(xiàn)寫入并保存txt文件的代碼實(shí)例內(nèi)容,需要的朋友們可以參考學(xué)習(xí)下。
    2020-02-02
  • MyBatis-Plus輸出完整SQL(帶參數(shù))的三種方案

    MyBatis-Plus輸出完整SQL(帶參數(shù))的三種方案

    當(dāng)我們使用 mybatis-plus 時(shí),可能會(huì)遇到SQL 不能直接執(zhí)行,調(diào)試也不方便的情況,那么,如何打印完整 SQL(帶參數(shù))呢?本篇文章將介紹 3 種實(shí)現(xiàn)方式,并對(duì)比它們的優(yōu)缺點(diǎn),需要的朋友可以參考下
    2025-02-02
  • Java與Spring?boot后端項(xiàng)目Bug超全總結(jié)

    Java與Spring?boot后端項(xiàng)目Bug超全總結(jié)

    Spring Boot是一個(gè)開源的 Java 開發(fā)框架,它的目的是簡(jiǎn)化Spring應(yīng)用程序的開發(fā)和部署,下面這篇文章主要給大家介紹了關(guān)于Java與Spring?boot后端項(xiàng)目Bug的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • springboot普通類中如何獲取session問題

    springboot普通類中如何獲取session問題

    這篇文章主要介紹了springboot普通類中如何獲取session問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java注解機(jī)制之Spring自動(dòng)裝配實(shí)現(xiàn)原理詳解

    Java注解機(jī)制之Spring自動(dòng)裝配實(shí)現(xiàn)原理詳解

    這篇文章主要為大家詳細(xì)介紹了Java注解機(jī)制之Spring自動(dòng)裝配實(shí)現(xiàn)原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • springboot整合Atomikos的示例詳解

    springboot整合Atomikos的示例詳解

    這篇文章主要為大家詳細(xì)介紹了幾種分布式事務(wù)的解決方案的兩階段提交Atomikos,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-11-11
  • java筆記學(xué)習(xí)之操作符

    java筆記學(xué)習(xí)之操作符

    本篇文章給大家分享了關(guān)于Java中操作符的相關(guān)知識(shí)點(diǎn)以及難點(diǎn)總結(jié),有需要的朋友參考學(xué)習(xí)下吧。
    2018-04-04

最新評(píng)論

竹北市| 木兰县| 海阳市| 吴堡县| 文山县| 卓资县| 萍乡市| 新乡市| 苗栗市| 天气| 灵山县| 小金县| 徐水县| 中西区| 深泽县| 砚山县| 鲁山县| 邢台县| 德江县| 洪江市| 固安县| 榆中县| 出国| 大关县| 江门市| 准格尔旗| 石嘴山市| 边坝县| 老河口市| 丰镇市| 太白县| 茌平县| 南木林县| 杭州市| 千阳县| 永年县| 黎川县| 木里| 高青县| 南召县| 渝北区|