色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何計算時間復雜度

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-13 11:19 ? 次閱讀

1 算法與時間復雜度

算法(Algorithm)是求解一個問題需要遵循的,被清楚指定的簡單指令的集合。
算法一旦確定,那么下一步就要確定該算法將需要多少時間和空間等資源,如果一個算法需要一兩年的時間來完成,那么該算法的用處就不會太大。同樣如果該算法需要若干個GB的內存,那么在大部分機器上都無法使用。

一個算法的評價主要從時間復雜度和空間復雜度來考慮。

而時間復雜度是一個函數,定性描述該算法的運行時間,通常用大O符號表示。

常見的時間復雜度有O(1),O(logn),O(n),O(n^2),O(2^n)...等

那么一個算法的時間復雜度如何計算呢,下面接著講。

2 時間復雜度計算

2.1 第一個時間復雜度計算

首先我們定義算法中的語句執行次數稱為語句頻度或時間頻度為T(n)。即T(n)表示程序的執行次數 。

首先我們看看如下的方法1執行多少次;

public int method1(){
     System.out.println("java技術指北 等你來"); //執行1次
     return 0;          //執行1次
 }

沒錯,它內部一共執行2次。

那么我們來看下面的方法2執行幾次:

public int method2(int n){
        for(int i = 0; i< n ; i++){
         //i = 0 執行1次,i< n 執行n+1次,i++執行n次
            System.out.println("java技術指北 等你來"); //輸出語句執行n次
        }
        return 1; //return 執行一次
    }

對,它一共執行了 3n+3 次。

那么對于方法1就有 T(n) = 2;
對于方法2就有 T(n) = 3n + 3;

實際的代碼肯定比示例中的代碼復雜得多,去統計代碼的執行次數顯然不可能,所以算法一般使用T(n)的漸進估算值來反映代碼的執行速度。而這個估算值我們用"時間復雜度"來表示。

所以針對方法1和方法2,如何根據T(n)估算出時間復雜度
過程如下:

  1. 對于 T(n) = 2 ,由于T(n)是一個常數,那么時間復雜度可以直接估算為 1 。所以T(n) = 2 的時間復雜度為 1。用標準的時間復雜度函數表示就是 O(1)。
  2. 對于T(n) = 3n + 3 ,隨著n值得不斷增長,常數3相對于3n來說可以忽略不計。而系數一般也會估算成1。相當于去掉了系數和常數,則該時間復雜度為n。用時間復雜度函數表示就是O(n)。
  3. 依次推廣到如下多項式中:對于T(n) = 3n^2 + 3n + 3. 隨著n值得不斷增大,多項式后面的項的增長就遠沒有n^2的增長大,可以直接舍棄低階項和常數項,則只保留n的次方數最大的那一項,所以它的時間復雜度就為O(n^3)。

小結一下,以上三個表達式的時間復雜度表示如下

表達式時間復雜度
T(n) = 2O(1)
T(n) = 3n + 3O(n)
T(n) = 3n^2 + 3n + 3O(n^2)

總結以上規律:

  • T(n)是常數:時間復雜度為O(1)
  • T(n)不是常數:時間復雜度為O(T(n)的最高次項并且去掉最高次項的系數)

2.2 常見循環的復雜度

下面方法1的時間復雜度為 O(1):

//時間復雜度為 O(1)
    public void m1(){
        System.out.println("java技術指北 等你來");
        System.out.println("操千曲而后曉聲,觀千劍而后識器");
        ...
        System.out.println("java技術指北 非你莫屬");
    }

下面方法2的時間復雜度為 O(n):

//時間復雜度為 O(n)    
    public int method2(int n){
        for(int i = 0; i < n ; i++){
            System.out.println("java技術指北 等你來");
        }
        return 1;
    }

下面方法3 時間復雜度為 O(n^2):

//時間復雜度為 O(n^2)
    public void method3(int n){
        for(int i = 0; i < n ; i++){
            for(int j = 0 ; j < i ; j ++){
                System.out.println("java技術指北 等你來");
            }
        }
    }

下面方法4的時間復雜度為 O(n^2):
以下方法4中第一個循環執行Q其時間復雜度為為O(n^2)
第二個循環時間復雜度為O(n)
則整個方法的時間復雜度要舍棄變化小的部分,最終的時間復雜度為O(n^2)

//時間復雜度為 O(n^2) 
    public int method4(int n){
        for(int i = 0; i < n ; i++){
            for(int j = 0 ; j < i ; j ++){
                System.out.println("java技術指北 等你來");
            }
        }
        for(int i = 0; i < n ; i++){
            System.out.println("java技術指北 等你來");
        }
        return 1;
    }

方法5的時間復雜度依然為O(n):
由于隨著n的增大,方法5種執行次數最多的是else后面的循環,所以會取執行次數最多的部分來計算時間復雜度。

//時間復雜度為O(n)
    public int method5(int n){
        if( n < 100){
            for(int i = 0; i < n ; i++){
                for(int j = 0 ; j < n ; j ++){
                    System.out.println("java技術指北 等你來");
                }
            }
        }else{
            for(int i = 0; i < n ; i++){
                System.out.println("java技術指北 等你來");
            }
        }
        return 1;
    }

2.3 其他時間復雜度計算

分析下面方法6的時間復雜度

public void method6(int n){
        for(int i = 0; i < n ; i++){
            for(int j = 0 ; j < n ; j ++){
                System.out.println("java技術指北 等你來");
            }
        }
    }

方法6執行分析
i=0 輸出語句執行 n 次
i=1 輸出語句執行 n-1 次
i=2 輸出語句執行 n-2 次
...
...
i=n-2 輸出語句執行 2 次
i=n-1 輸出語句執行 1 次

總執行次數就是
T(n) = n + (n-1) + (n-2) ... + 2 + 1
= n(n+1)/2 = 1/2*n^2 =

則其時間復雜度為O(n^2)

下面我們在看方法7的時間復雜度

public void method7(int n){
        int i = 1;
  while(i< n)
  {
      i = i * 2;
  }
    }

執行情況分析:
n = 2 的時候執行1次 即 T(2) = 1
n = 4 的時候執行2次 即 T(4) = 2
n = 8 的時候執行3次 即 T(8) = 3
n = 16 的時候執行4次 即 T(16) = 4

我們發現如下規律
n = 2 的時候有 2^T(2) = 2
n = 4 的時候有 2^T(4) = 4
n = 8 的時候有 2^T(8) = 8
n = 16 的時候有 2^T(16) = 16
n = 32 的時候有 2^T(32) = 32
n = n 的時候有 2^T(n) = n

如果要把T(n)放到等式左邊那么

那么時間復雜度就是

再去掉底數2 則時間復雜度為

3 時間復雜度排序

我們分析了以上幾種簡單循環的時間復雜度,那么既然時間復雜度是用來表示算法的執行效率的,我們對一般常見的時間復雜度進行如下排序(由快到慢)。

圖片
timeComplexitiesOrder.jpg

我們再用曲線圖看一下時間復雜度。

圖片

從圖中也可以看出,隨著元素變多,指數、階乘級別的增長是最快的。顯而易見其執行效率最低。

4 時間復雜度推算

最后我們計算一下如下遞推關系的算法的時間復雜度
T(n)= T(n-1) + n,其中 T(0) = 1,求T(n)的時間復雜度?

我們可以將n-1 帶入上面的公式,得到 T(n-1) = T(n-2) + (n-1)
再將T(n-1) 的表達式帶入到T(n)的表達式
再依次將n-2 ,n-3...帶入到公式中,其演算結果如下。

T(n)= T(n-1) + n
= T(n-2) + (n-1) + n
= T(n-3) +(n-2) + (n-1) + n
......
= T(2) + 3 + ......(n-2) + (n-1) + n
= T(1) + 2 + 3 + ......(n-2) + (n-1) + n
= T(0) + 1 + 2 + 3 + ......(n-2) + (n-1) + n
= 1 + 1 + 2 + 3 + ...... + (n-1) +n

最終我們得到T(n) 的時間復雜度為O(n^2)

總結

本篇介紹了時間復雜度以及如何計算時間復雜度,相信你已經掌握了吧。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內存
    +關注

    關注

    8

    文章

    3019

    瀏覽量

    74005
  • 程序
    +關注

    關注

    117

    文章

    3785

    瀏覽量

    81004
  • 機器
    +關注

    關注

    0

    文章

    780

    瀏覽量

    40711
  • 函數
    +關注

    關注

    3

    文章

    4327

    瀏覽量

    62573
收藏 人收藏

    評論

    相關推薦

    PCB與PCBA工藝復雜度的量化評估與應用初探!

    , 不知道如何區分普通和復雜的PCB和 PCBA的設計,并采用什么樣的方式來處理。 基于上述考慮, 我們參考了業 界已有的作法, 設計了一個PCB 和 PCBA的工藝復雜度計算公式以解決這 方面
    發表于 06-14 11:15

    數據結構:第1章緒論第5講-計算時間復雜度舉例(1)#結構數據

    數據結構
    學習硬聲知識
    發布于 :2022年12月17日 10:18:24

    數據結構:第1章緒論第5講-計算時間復雜度舉例(2)#結構數據

    數據結構
    學習硬聲知識
    發布于 :2022年12月17日 10:18:56

    JEM軟件復雜度的增加情況

    這篇文檔展示了幾個機構關于JEM軟件復雜度的增加情況的看法,特別提出來創立一個新的Ad-hoc組,研究降低軟件一般性復雜度的可能方法。
    發表于 07-19 08:25

    時間復雜度是指什么

    原理->微機原理->軟件工程,編譯原理,數據庫數據結構1.時間復雜度時間復雜度是指執行算法所需要的計算工作量,因為整個算法的執行
    發表于 07-22 10:01

    各種排序算法的時間空間復雜度、穩定性

    各種排序算法的時間空間復雜度、穩定性一、排序算法分類:二、排序算法比較:注:1、歸并排序可以通過手搖算法將空間復雜度降到O(1),但是時間復雜度
    發表于 12-21 07:48

    圖像復雜度對信息隱藏性能影響分析

    針對信息隱藏中載體圖像的差異性,提出一種圖像復雜度評價方法,綜合考慮圖像的壓縮特性以及圖像紋理能量作為圖像復雜度指標,并基于閾值劃分準則對栽體圖像進行復雜度分類,以幾種經典的基于直方圖的幾種無損隱藏
    發表于 11-14 09:57 ?5次下載

    深度剖析時間復雜度

    相信每一位錄友都接觸過時間復雜度,但又對時間復雜度的認識處于一種朦朧的狀態,所以是時候對時間復雜度
    的頭像 發表于 03-18 10:18 ?1890次閱讀

    如何求遞歸算法的時間復雜度

    那么我通過一道簡單的面試題,模擬面試的場景,來帶大家逐步分析遞歸算法的時間復雜度,最后找出最優解,來看看同樣是遞歸,怎么就寫成了O(n)的代碼。
    的頭像 發表于 07-13 11:30 ?2260次閱讀

    如何求遞歸算法的時間復雜度

    相信很多同學對遞歸算法的時間復雜度都很模糊,那么這篇Carl來給大家通透的講一講。
    的頭像 發表于 07-13 11:33 ?1606次閱讀

    常見機器學習算法的計算復雜度

    時間復雜度不是測量一個算法或一段代碼在某個機器或者條件下運行所花費的時間時間復雜度一般指時間
    發表于 10-02 12:45 ?812次閱讀

    算法時空復雜度分析實用指南1

    我以前的文章主要都是講解算法的原理和解題的思維,對時間復雜度和空間復雜度的分析經常一筆帶過,主要是基于以下兩個原因:
    的頭像 發表于 04-12 14:37 ?509次閱讀
    算法時空<b class='flag-5'>復雜度</b>分析實用指南1

    算法時空復雜度分析實用指南2

    類似的,想想之前說的數據結構擴容的場景,也許`N`次操作中的某一次操作恰好觸發了擴容,導致時間復雜度提高,但總的時間復雜度依然保持在`O(N)`,所以均攤到每一次操作上,其平均
    的頭像 發表于 04-12 14:38 ?528次閱讀
    算法時空<b class='flag-5'>復雜度</b>分析實用指南2

    算法時空復雜度分析實用指南(上)

    本文會篇幅較長,會涵蓋如下幾點: 1、Big O 表示法的幾個基本特點。 2、非遞歸算法中的時間復雜度分析。 3、數據結構 API 的效率衡量方法(攤還分析)。 4、遞歸算法的時間/空間
    的頭像 發表于 04-19 10:34 ?811次閱讀
    算法時空<b class='flag-5'>復雜度</b>分析實用指南(上)

    算法時空復雜度分析實用指南(下)

    Big O 表示法的幾個基本特點。 2、非遞歸算法中的時間復雜度分析。 3、數據結構 API 的效率衡量方法(攤還分析)。 4、遞歸算法的時間/空間復雜度的分析方法,
    的頭像 發表于 04-19 10:35 ?688次閱讀
    算法時空<b class='flag-5'>復雜度</b>分析實用指南(下)
    主站蜘蛛池模板: AAA级精品无码久久久国片| 国产 精品 亚洲 欧美 高清| 日本xxx护士与黑人| 国色精品VA在线观看免费视频| 365电影成人亚洲网在线观看| 熟女啪啪白浆嗷嗷叫| 麻豆区蜜芽区| 国产精品亚洲专一区二区三区| 99RE6国产精品视频播放| 亚洲精品第二页| 入禽太深免费高清在线观看5| 久久综合狠狠综合久久综合88| 国产精品18久久久久久欧美网址| 中国成人在线视频| 亚洲 天堂 国产在线播放| 青草久久影院| 蜜桃99影院| 久久蜜视频| 精品久久久久久久高清| 国产成人无码精品久久久影院 | 东京热一本无码av| 5G年龄确认我已满18免费| 亚洲精品第二页| 午夜伦伦电影理论片大片| 日本久久精品毛片一区随边看| 麻豆精品一区二正一三区| 色欲AV精品一区二区入口 | 色狠狠xx| 任你懆视频 这里只有精品| 理论片87福利理论电影| 和尚扒开双腿蹂躏| 国产午夜婷婷精品无码A片 | 涩涩游戏盒| 琪琪see色原网色原网站| 免费高清在线影片一区| 伦理片天堂eeuss影院| 久久精品中文字幕有码日本| 接吻吃胸摸下面啪啪教程| 好男人午夜www视频在线观看 | 日本污ww视频网站| 欧美国产精品主播一区|