日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

数据结构和算法 —— 时间复杂度+空间复杂度

發(fā)布時(shí)間:2024/5/6 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构和算法 —— 时间复杂度+空间复杂度 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

算法效率的度量方法

事后統(tǒng)計(jì)方法

這種方法主要是通過(guò)設(shè)計(jì)好的測(cè)試程序和數(shù)據(jù),利用計(jì)算機(jī)計(jì)時(shí)器對(duì)不同算法編制的程序的運(yùn)行時(shí)間進(jìn)行比較,從而確定算法效率的高低。

但這種方法顯然是有很大缺陷的:
必須依據(jù)算法事先編制好測(cè)試程序,通常需要花費(fèi)大量時(shí)間和精力;
不同測(cè)試環(huán)境差別不是一般的大!

事前分析估算方法

在計(jì)算機(jī)程序編寫前,依據(jù)統(tǒng)計(jì)方法對(duì)算法進(jìn)行估算。

  • 算法采用的策略,方案
  • 編譯產(chǎn)生的代碼質(zhì)量
  • 問(wèn)題的輸入規(guī)模
  • 機(jī)器執(zhí)行指令的速度
    由此可見(jiàn),拋開(kāi)這些與計(jì)算機(jī)硬件、軟件有關(guān)的因素,一個(gè)程序的運(yùn)行時(shí)間依賴于算法的好壞和問(wèn)題的輸入規(guī)模。(所謂的問(wèn)題輸入規(guī)模是指輸入量的多少)
  • 不關(guān)心編寫程序所用的語(yǔ)言是什么,也不關(guān)心這些程序?qū)⑴茉谑裁礃拥挠?jì)算機(jī)上,只關(guān)心它所實(shí)現(xiàn)的算法。
    這樣,不計(jì)那些循環(huán)索引的遞增和循環(huán)終止條件、變量聲明、打印結(jié)果等操作。
    最終,在分析程序的運(yùn)行時(shí)間時(shí),最重要的是把程序看成是獨(dú)立于程序設(shè)計(jì)語(yǔ)言的算法或一系列步驟。
    在分析一個(gè)算法的運(yùn)行時(shí)間時(shí),重要的是把基本操作的數(shù)量和輸入模式關(guān)聯(lián)起來(lái)。

    函數(shù)的漸近增長(zhǎng)

    給定兩個(gè)函數(shù)f(n)和g(n),如果存在一個(gè)整數(shù)N,使得對(duì)于所有的n>N,f(n)總是比g(n)大,那么,我們說(shuō)f(n)的增長(zhǎng)漸近快于g(n)。

    最高次項(xiàng)的指數(shù)大的,函數(shù)隨著n的增長(zhǎng),結(jié)果也會(huì)變得增長(zhǎng)特別快。

    判斷一個(gè)算法的效率時(shí),函數(shù)中的常數(shù)和其他次要項(xiàng)常常可以忽略,而更應(yīng)該關(guān)注主項(xiàng)(最高項(xiàng))的階數(shù)。

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

    算法時(shí)間復(fù)雜度的定義:在進(jìn)行算法分析時(shí),語(yǔ)句總的執(zhí)行次數(shù)T(n)是關(guān)于問(wèn)題規(guī)模n的函數(shù),進(jìn)而分析T(n)隨n的變化情況并確定T(n)的數(shù)量級(jí)。

    算法的時(shí)間復(fù)雜度,也就是算法的時(shí)間量度,記作:T(n)= O(f(n))。它表示隨問(wèn)題規(guī)模n的增大,算法執(zhí)行時(shí)間的增長(zhǎng)率和f(n)的增長(zhǎng)率相同,稱作算法的漸近時(shí)間復(fù)雜度,簡(jiǎn)稱為時(shí)間復(fù)雜度。其中f(n)是問(wèn)題規(guī)模n的某個(gè)函數(shù)。

    這樣用大寫O()來(lái)體現(xiàn)算法時(shí)間復(fù)雜度的記法,我們稱之為大O記法。

    一般情況下,隨著輸入規(guī)模n的增大,T(n)增長(zhǎng)最慢的算法為最優(yōu)算法。

    如何推導(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ù)。
    4.得到的最后結(jié)果就是大O階。

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


    常用的時(shí)間復(fù)雜度所耗費(fèi)的時(shí)間從小到大依次是:
    O(1) < O(logn) < (n) < O(nlogn) < O(n ^ 2) < O(n ^ 3) < O(2 ^ n) < O(n!) < O(n ^ n)

    空間復(fù)雜度

    算法的空間復(fù)雜度通過(guò)計(jì)算算法所需的存儲(chǔ)空間實(shí)現(xiàn),算法的空間復(fù)雜度的計(jì)算公式記作:S(n)=O(f(n)),其中,n為問(wèn)題的規(guī)模,f(n)為語(yǔ)句關(guān)于n所占存儲(chǔ)空間的函數(shù)。

    通常,我們都是用“時(shí)間復(fù)雜度”來(lái)指運(yùn)行時(shí)間的需求,是用“空間復(fù)雜度”指空間需求。

    當(dāng)直接要讓我們求“復(fù)雜度”時(shí),通常指的是時(shí)間復(fù)雜度。

    總結(jié)

    以上是生活随笔為你收集整理的数据结构和算法 —— 时间复杂度+空间复杂度的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。