日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

怎么計算我們自己程序的時間復雜度

來源: 責編: 時間:2024-05-20 17:55:17 215觀看
導讀知道自己寫的程序的時間復雜度,有利于我們寫出能夠高效運行的程序。程序是由一個個函數組成的,有些簡單的由幾個基礎運算組成的函數大家一眼就能看出來它的時間復雜度,但是大部分函數沒那么簡單,只要函數里面涉及到了循環

知道自己寫的程序的時間復雜度,有利于我們寫出能夠高效運行的程序。S7u28資訊網——每日最新資訊28at.com

程序是由一個個函數組成的,有些簡單的由幾個基礎運算組成的函數大家一眼就能看出來它的時間復雜度,但是大部分函數沒那么簡單,只要函數里面涉及到了循環、外部函數調用甚至遞歸的時候它的時間復雜度就沒那么容易分析啦。S7u28資訊網——每日最新資訊28at.com

這篇文章的內容,可以幫你快速推導出程序代碼的時間復雜度。S7u28資訊網——每日最新資訊28at.com

要分析程序的時間復雜度,首先還是要確定時間復雜度的度量標準— —英文文檔里通常會用 metric 這個單詞來表示,這個標準規定了在函數中平鋪展開的代碼、循環中的代碼、有函數調用的代碼、以及遞歸調用的代碼的時間復雜度的測量方式。S7u28資訊網——每日最新資訊28at.com

Big O Notations

如何計算程序的時間復雜度呢?最常用的度量方式叫做 Big O Notations 翻譯過來叫大O標記法。S7u28資訊網——每日最新資訊28at.com

使用大O標記法前要先了解它的幾個要點:S7u28資訊網——每日最新資訊28at.com

  • 相同配置的計算機進行一次基本運算的時間是一定的,因此我們將程序基本運算的執行次數作為時間復雜度的衡量標準。
  • 時間復雜度是對運行次數的錯略估計,在計算時可以只考慮對運行時間貢獻大的語句而忽略運行次數少的語句。比如 O(3 * n2 + 10n + 10) 會被統計成 O(n2)。
  • 比如有些涉及到排序的程序,執行時間往往依賴于程序的輸入,可以分為最好、最壞、平均情況的時間復雜度,這種時候使用大 O 標記法時我們只用關注最壞的情況,因為最壞情況對衡量程序效率的好壞具有實際意義。

在大O標記法中,常見的時間復雜度有一下幾類。S7u28資訊網——每日最新資訊28at.com

  1. 常數階:常數階的復雜度通常用O(1)表示,不是說程序只有一行基礎代碼運行,它的意思是不管程序的輸入是什么程序都會運行一個固定數量的運算,這個數可以是任何常數5、100、200都行,重點是他不會隨輸入的增長才被統計稱 O(1)
  2. 多項式階:很多算法的時間復雜度是 O(n)、O(n2)、O(n3)這樣的多項式。
  3. 指數階:指數階的時間復雜度用O(2n) 、 O(nn) 等表示,這種程序運行效率極差,是程序員寫代碼一定要避開的大坑。
  4. 對數階:對數階的程序運行效率較高,通常用O(logn)、 O(n log n) 等表示。

它們的關系如下:S7u28資訊網——每日最新資訊28at.com

圖片圖片S7u28資訊網——每日最新資訊28at.com

從上面的圖我們可以看到,O(1)是最高效最穩定的,完全不受輸入數據尺寸增長的影響,指數階隨著輸入的增加而爆增,而對數階則增長緩慢。S7u28資訊網——每日最新資訊28at.com

按照時間復雜度從低到高排序:S7u28資訊網——每日最新資訊28at.com

O(1) < O(logn) < O(n) < O(n log n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)S7u28資訊網——每日最新資訊28at.com

在寫程序時,我們要注意時間復雜度增量的問題,盡量避免爆炸級增長。S7u28資訊網——每日最新資訊28at.com

了解完時間復雜度的大O標記法后,接下來我們看下怎么把我們平時接觸的代碼轉化為其對應的時間復雜度。S7u28資訊網——每日最新資訊28at.com

順序語句的復雜度

這是最簡單的代碼結構,比如說我們有一個下面的計算3個數字的平方和的函數。S7u28資訊網——每日最新資訊28at.com

function squareSum(a, b, c) {  const sa = a * a;  const sb = b * b;  const sc = c * c;  const sum = sa + sb + sc;  return sum;}

函數中的每個語句都是一個基本運算。每行的時間復雜度為 O(1)。我們把所有語句的時間加起來,它仍然是 O(1), 記住昂,不是O(3)。S7u28資訊網——每日最新資訊28at.com

O(1)表示程序時常數級的時間復雜度,不管程序的輸入是什么程序都會運行數量固定的操作。S7u28資訊網——每日最新資訊28at.com

注意如果順序排列的代碼中有對函數的調用,復雜度就不是O(1)了,你想知道是多少?S7u28資訊網——每日最新資訊28at.com

條件語句的復雜度

很少有會有程序代碼沒有任何條件語句。因為大 O 標記法關注程序運行的的最壞情況,所以對一個類似這樣的條件語句:S7u28資訊網——每日最新資訊28at.com

if (isValid) {  statement1;  statement2;} else {  statement3;}

它的時間復雜度可以按下面這個公式推導出來:S7u28資訊網——每日最新資訊28at.com

T(n) = Math.max([t(statement1) + t(statement2)], [time(statement3)])

比如說下面這個代碼:S7u28資訊網——每日最新資訊28at.com

if (isValid) {  array.sort();  return true;} else {  return false;}

if代碼塊中的時間復雜度為O( n log n) — 常用編程語言內置排序算法的時間復雜度,else代碼塊的時間復雜度為O(1),那么整個代碼的時間復雜度為:S7u28資訊網——每日最新資訊28at.com

O([n log n] + [n]) => O(n log n)

循環語句的復雜度

線性循環

for (let i = 0; i < array.length; i++) {  statement1;  statement2;}

對于這個例子,循環執行 array.length次,所有與輸入數據增長而成比例增長的循環都具有線性—常數階的時間復雜度 O(n)。S7u28資訊網——每日最新資訊28at.com

對數循環

觀察下面的程序:S7u28資訊網——每日最新資訊28at.com

function fn(n) {  i = 1;  while( i < n) {     i = i*2;  } }

對于這個程序,我們無法確定while 以及 i = i*2 語句運行了多少次,這時可以假設運行了x次,每次運行后i的值為2、22、23… 當while 語句的條件不滿足即i = n時結束,也就是2x = n , x = log2n ,它的時間復雜度近似于O(logn )。S7u28資訊網——每日最新資訊28at.com

固定次數循環

for (let i = 0; i < 4; i++) {  statement1;  statement2;}

針對固定條件的循環,像上面這個程序一樣,無聊時固定循環4次還是 100 次時間復雜度都是 O(1)。S7u28資訊網——每日最新資訊28at.com

嵌套循環

for (let i = 0; i < n; i++) {  statement1;  for (let j = 0; j < m; j++) {    statement2;    statement3;  }}

假設循環中的語句都是基礎操作,沒有對函數的調用,那么這個代碼有兩層嵌套循環,時間復雜度為O(n2)。S7u28資訊網——每日最新資訊28at.com

循環中有函數調用的時間復雜度

假如我們有這樣一個程序:S7u28資訊網——每日最新資訊28at.com

for (let i = 0; i < n; i++) {  fn1();  for (let j = 0; j < n; j++) {    fn2();    for (let k = 0; k < n; k++) {      fn3();    }  }}

根據 fn1、fn2 和 fn3 函數自身的時間復雜度,整個程序將擁有不同的運行時間。S7u28資訊網——每日最新資訊28at.com

如果這三個函數它們都是常數階 O(1),那么最終的運行時間將為 O(n3)。但是如果只有 fn1 和 fn2 是常數介, fn3 的時間復雜度為 O(n2),則該程序的運行時間將為 O(n5)。S7u28資訊網——每日最新資訊28at.com

一般來說,循環中有函數調用,時間復雜度可以用下面這個公式計算:S7u28資訊網——每日最新資訊28at.com

T(n) = n * [ t(fn1()) + n * [ t(fn2()) + n * [ t(fn3()) ] ] ]

函數遞歸調用的時間復雜度

function fn(n) { if (n == 1 || n == 2) {   return 1; } return fn(n - 1) + fn(n - 2);}

以上是學算法都學過的斐波那切數列的遞歸調用實現版本,它的時間復雜度為O(2n) ,所以在平時寫代碼時在你不確定程序能執行多少次的時候,最好不要輕易使用遞歸調用。S7u28資訊網——每日最新資訊28at.com

總結

這篇內容我們梳理了一下不同的時間復雜對大概對應什么樣的代碼,讓我們能更正確地估算自己寫的程序的時間復雜度。S7u28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-89409-0.html怎么計算我們自己程序的時間復雜度

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 基于Puppeteer實現前端SSR完美接入方案

下一篇: Java引用類型解析:掌握強引用、軟引用、弱引用和幻象引用的妙用

標簽:
  • 熱門焦點
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機潮已經過去,最明顯的肯定就是大內存和存儲的機型了,另外部分中端機也取消了屏幕塑料支架
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • Java NIO內存映射文件:提高文件讀寫效率的優秀實踐!

    Java的NIO庫提供了內存映射文件的支持,它可以將文件映射到內存中,從而可以更快地讀取和寫入文件數據。本文將對Java內存映射文件進行詳細的介紹和演示。內存映射文件概述內存
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數或類的行為。裝飾器本質上是一個函數,它接受另一個函數或類作為參數,并返回一個新的函數或類。它們通常用
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運營研究社作者 | 張知白編輯 | 楊佩汶設計 | 晏談夢潔這個暑期,旅游賽道徹底火了:有的「地方」火了&mdash;&mdash;貴州村超旅游收入 1 個月超過 12 億;有的「博主」火了&m
  • 蘋果、三星、惠普等暫停向印度出口筆記本和平板電腦

    集微網消息,據彭博社報道,在8月3日印度突然禁止在沒有許可證的情況下向印度進口電腦/平板及顯示器等產品后,蘋果、三星電子和惠普等大公司暫停向印度
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯發科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經上市便受到了諸多用
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統和圖形事業部總經理 表示,Xe-HP“ Arctic Sound” 系列服務器 GPU 已經應用于 oneAPI devcloud 云服
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
狼人社综合社区| 亚洲欧美日韩精品一区二区| 国产精品劲爆视频| 欧美日本三区| 欧美日韩理论| 国产精品videosex极品| 国产精品久久波多野结衣| 欧美日韩在线一区二区| 国产精品分类| 国产一区二区三区高清在线观看 | 国产一区二区三区高清在线观看| 国产欧美在线| 黑人巨大精品欧美一区二区| 亚洲福利国产| 艳妇臀荡乳欲伦亚洲一区| 亚洲婷婷免费| 欧美一级视频| 久久综合婷婷| 欧美日韩国产免费观看| 国产精品丝袜白浆摸在线| 国产综合欧美在线看| 亚洲国产天堂网精品网站| 亚洲最黄网站| 欧美亚洲在线| 欧美大片18| 国产精品美女www爽爽爽视频| 国产亚洲欧美激情| 亚洲国产99| 亚洲一卡久久| 久久久噜噜噜久久狠狠50岁| 欧美理论在线播放| 国产区二精品视| 亚洲激情第一区| 亚洲自拍偷拍麻豆| 乱中年女人伦av一区二区| 欧美日韩一区二区免费视频| 国产一区二区高清| 亚洲美女在线看| 久久av在线| 欧美日韩国产成人精品| 国产亚洲一级| 一本色道久久88精品综合| 欧美中文在线字幕| 欧美噜噜久久久xxx| 国产综合色精品一区二区三区| 亚洲精品视频在线观看免费| 性色av一区二区三区在线观看| 欧美成人69| 国产视频观看一区| 日韩午夜电影av| 久久久一区二区三区| 欧美日韩在线视频首页| 在线欧美电影| 午夜精品免费视频| 欧美日本一道本| 国产一区二区久久| 中文精品视频一区二区在线观看| 久久一区视频| 国产精品永久免费观看| 亚洲精品黄色| 久久精品午夜| 国产精品日韩在线播放| 最新成人在线| 久久久精品五月天| 国产伦精品一区二区三区在线观看| 亚洲黄色三级| 久久久久**毛片大全| 国产精品日韩电影| 日韩视频免费观看高清在线视频 | 欧美中文字幕在线| 国产精品久久久久久久久婷婷 | 免费日韩成人| 国产麻豆一精品一av一免费| 亚洲精品视频在线播放| 玖玖国产精品视频| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美日本一区| 亚洲欧洲在线观看| 蜜桃久久av一区| 狠狠久久婷婷| 欧美在线观看日本一区| 国产精品久久激情| 夜夜嗨av一区二区三区| 欧美大片va欧美在线播放| 在线观看视频免费一区二区三区| 欧美在线看片| 国产女精品视频网站免费| 亚洲一区二区三区精品动漫| 欧美日韩小视频| 日韩视频第一页| 欧美日韩ab| 在线免费观看欧美| 久久久久久久国产| 韩国v欧美v日本v亚洲v| 欧美一区二区观看视频| 欧美日韩国产大片| 亚洲精品欧美日韩| 欧美国产日本在线| 最新国产乱人伦偷精品免费网站| 蜜桃av久久久亚洲精品| 亚洲国产精品一区二区尤物区 | 久久精品一区二区三区不卡牛牛 | 亚洲免费成人av电影| 欧美—级高清免费播放| 亚洲毛片一区二区| 欧美日韩极品在线观看一区| 一本到12不卡视频在线dvd| 欧美日韩免费观看一区二区三区| 日韩午夜高潮| 欧美视频中文字幕| 亚洲一区精品视频| 国产精品一二三四区| 午夜精品国产精品大乳美女| 国产欧美不卡| 欧美在线视频观看免费网站| 国产一区二区三区奇米久涩| 久久久午夜精品| 国产综合av| 欧美国产三区| 一区二区三区精品视频在线观看| 国产精品一区二区视频| 久久久久久国产精品mv| 亚洲乱码国产乱码精品精天堂 | 亚洲电影观看| 欧美老女人xx| 亚洲欧美日韩久久精品 | 欧美日本国产视频| 亚洲伦伦在线| 国产精品萝li| 久久久久久久国产| 亚洲人成在线免费观看| 欧美色网一区二区| 午夜精品久久久久久久久 | 国产美女精品一区二区三区| 久久精视频免费在线久久完整在线看| 激情一区二区| 欧美日韩成人一区| 午夜精品影院在线观看| 一区二区三区在线免费视频| 欧美顶级艳妇交换群宴| 亚洲欧美国产日韩中文字幕| 国内精品国产成人| 欧美人与禽性xxxxx杂性| 亚洲欧美日本伦理| 国产视频欧美| 欧美成人精品h版在线观看| 99国产精品久久久久久久| 欧美二区在线看| 亚洲一区欧美二区| 一区二区在线视频| 欧美视频中文在线看| 久久狠狠婷婷| 亚洲乱码国产乱码精品精可以看| 国产精品日韩在线| 免费在线国产精品| 亚洲免费影院| 亚洲国产精品t66y| 国产精品一区二区久久精品| 美女在线一区二区| 亚洲欧美另类久久久精品2019| 伊人久久大香线蕉av超碰演员| 欧美日韩日日夜夜| 久久香蕉精品| 亚洲视频视频在线| 亚洲福利国产精品| 国产精品视区| 欧美黄污视频| 久久久久久噜噜噜久久久精品| 日韩一区二区精品视频| 国产一区二区在线观看免费| 免费影视亚洲| 亚洲精品亚洲人成人网| 国产日韩亚洲欧美精品| 欧美日韩国产综合视频在线观看中文 | 影音先锋亚洲电影| 欧美午夜性色大片在线观看| 欧美不卡一区| 久久综合给合| 久久激情综合| 亚洲欧美中文日韩v在线观看| 日韩一级二级三级| 亚洲精品欧美| 亚洲国产欧美一区二区三区久久 | 久久精品91久久久久久再现| 亚洲一区二区在线播放| 一本到高清视频免费精品| 亚洲国产成人高清精品| 影音先锋在线一区| 国产综合久久久久久| 国产乱码精品一区二区三区五月婷 | 黄色精品一区二区| 国产亚洲亚洲| 国产精品呻吟| 国产精品国产一区二区| 欧美日韩另类字幕中文| 欧美国产高潮xxxx1819| 免费成人在线视频网站| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久99伊人| 久久久久久久综合日本| 国产精品v欧美精品v日本精品动漫| 香蕉成人伊视频在线观看| 日韩视频永久免费观看| 亚洲精品国产拍免费91在线|