時間復雜度(Time Complexity)

時間復雜度

1. 什么是時間復雜度?

時間復雜度(Time Complexity)是計算算法執行時間隨輸入規模(n)增長的變化趨勢。它衡量算法的效率,通常使用大 O 記號(Big-O notation)表示,忽略低階項和常數系數。

2. 時間復雜度的用途

  • 評估算法性能:幫助選擇更高效的算法,提高程序執行速度。
  • 預測程序運行時間:根據輸入規模預估代碼的執行時間。
  • 優化代碼:通過分析時間復雜度找到瓶頸,優化算法。

3. 常見時間復雜度及其排序

按照執行速度從快到慢排序如下:

時間復雜度說明示例
O(1)常數時間直接訪問數組元素 arr[i]
O(log n)對數時間二分查找
O(n)線性時間遍歷數組
O(n log n)線性對數時間快速排序、歸并排序
O(n2)平方時間冒泡排序、選擇排序
O(n3)立方時間三重嵌套循環
O(2?)指數時間遞歸求解斐波那契數列
O(n!)階乘時間旅行商問題(TSP)暴力解法

4. 如何計算時間復雜度?

方法 1:統計基本操作次數

基本操作指的是影響運行時間的核心代碼(如循環、遞歸調用等)。

方法 2:忽略常數項

時間復雜度關注增長趨勢,忽略常數。例如:

  • O(2n) 簡化為 O(n)
  • O(3n2 + 5n + 10) 簡化為 O(n2)

方法 3:只保留最高階項

例如:O(n2 + n) 取最高階項 O(n2)。

5. 計算示例

示例 1:遍歷數組

void loop(int arr[], int n) {for (int i = 0; i < n; i++) {  // n 次執行printf("%d", arr[i]); // O(1)}
}
  • 時間復雜度:O(n)

示例 2:嵌套循環

void nestedLoop(int n) {for (int i = 0; i < n; i++) {      // O(n)for (int j = 0; j < n; j++) {  // O(n)printf("%d", i * j); // O(1)}}
}
  • 時間復雜度:O(n2)

示例 3:對數復雜度

void logComplexity(int n) {for (int i = 1; i < n; i *= 2) { // i 每次翻倍printf("%d", i);}
}
  • 時間復雜度:O(log n)

示例 4:遞歸復雜度

int fibonacci(int n) {if (n <= 1) return n;return fibonacci(n - 1) + fibonacci(n - 2);
}
  • 時間復雜度:O(2?)

6. 復雜度增長趨勢(直觀理解)

時間復雜度增長趨勢
O(1)超快,固定時間
O(log n)很快,數據翻倍時時間增加一點
O(n)線性增長,數據翻倍,時間也翻倍
O(n log n)接近線性,常見于高效排序
O(n2)慢,多用于暴力解法
O(2?)很慢,指數爆炸
O(n!)超級慢,幾乎無法計算大規模數據

7. 總結

  • 遍歷數組:O(n)
  • 嵌套循環:O(n2)
  • 二分查找:O(log n)
  • 遞歸斐波那契:O(2?)
  • 高效算法應盡量選擇 O(n log n) 或更快的算法! 🚀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72201.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72201.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72201.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

樹莓派:更新源

發行版本 Debian 一直維護著至少三個發行版本&#xff1a;“穩定版&#xff08;stable&#xff09;”&#xff0c;“測試版&#xff08;testing&#xff09;”和“不穩定版&#xff08;unstable&#xff09;”。 發行版目錄 下一代 Debian 正式發行版的代號為 bullseye — 發布…

K8s 1.27.1 實戰系列(八)Service

一、Service介紹 1、Service 的作用與核心功能 Service 是 Kubernetes 中用于抽象一組 Pod 并提供穩定訪問入口的資源。它解決了以下問題: ?Pod IP 不固定:Pod 可能因故障、擴縮容或更新導致 IP 變化,Service 通過 ClusterIP(虛擬 IP)提供固定訪問地址。?負載均衡:自動…

RocketMQ性能優化篇

在分布式消息系統中&#xff0c;RocketMQ以其高性能、高可靠性和高可擴展性而被廣泛應用。然而&#xff0c;為了充分發揮其性能優勢&#xff0c;需要進行一系列的性能測試和優化。本文將從性能測試方法和優化實踐兩個方面&#xff0c;詳細介紹如何對RocketMQ進行性能優化。通過…

CSS 知識點總結1

CSS 知識點總結&#xff11; 今天寫了兩個頁面,用到的知識點,總結一下 1. Flexbox 布局 display: flex;&#xff1a;啟用 Flexbox 布局&#xff0c;用于創建靈活的容器。flex-direction: column;&#xff1a;將子元素垂直排列。justify-content&#xff1a;控制子元素在主軸…

雙指針算法專題之——復寫零

文章目錄 題目介紹思路分析異地復寫優化為就地復寫 AC代碼 題目介紹 鏈接: 1089. 復寫零 思路分析 那么這道題我們依然可以使用雙指針算法來解決 異地復寫 先不考慮題目的要求&#xff0c;直接就地在原數組上修改&#xff0c;可能不太好想&#xff0c;我們這里可以先在一個…

Python控制語句 ——break和continue

1.以下關于Python循環結構的描述中,錯誤的是() 。 A、break用來結束當前當次語句,但不跳出當前的循環體。 B、遍歷循環中的遍歷結構可以是字符串、文件、組合數據類型和range函數等。 C、Python通過for,while等保留字構建循環結構。 D、continue只結束本次循環。 答案:A。在…

搭建阿里云專有網絡VPC

目錄 一、概述 二、專有網絡vpc 2.1 vpc基本信息 2.2 vpc資源管理 2.3 vpc網段管理 三、交換機 四、NAT網關 4.1 綁定彈性公網IP 4.2 NAT網關信息 4.3 綁定的彈性公網IP 4.4 DNAT 4.5 SNAT 五、彈性公網IP 六、訪問控制ACL&#xff08;綁定交換機&#xff09; 6…

阿里巴巴發布 R1-Omni:首個基于 RLVR 的全模態大語言模型,用于情感識別

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

《深度剖析:鴻蒙系統下智能NPC與游戲劇情的深度融合》

在游戲開發領域&#xff0c;鴻蒙系統的崛起為開發者們帶來了前所未有的機遇與挑戰。尤其是在開發基于鴻蒙系統的人工智能游戲時&#xff0c;實現智能NPC的行為邏輯與游戲劇情緊密結合&#xff0c;成為了打造沉浸式游戲體驗的關鍵。 鴻蒙系統作為一款面向全場景的分布式操作系統…

聚劃算!三個模型對比預測!CNN-GRU、GRU、CNN三模型多變量時序光伏功率預測

聚劃算&#xff01;三個模型對比預測&#xff01;CNN-GRU、GRU、CNN三模型多變量時序光伏功率預測 目錄 聚劃算&#xff01;三個模型對比預測&#xff01;CNN-GRU、GRU、CNN三模型多變量時序光伏功率預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 CNN-GRU、GRU、CN…

C# 的 ManualResetEvent(線程同步操作) 類詳解

C# 的 ManualResetEvent 類詳解 作用 ManualResetEvent 是用于線程同步操作的類&#xff0c;允許一個或多個線程等待特定信號&#xff0c;以協調多個線程的執行順序。它通過事件通知機制實現&#xff0c;確保線程在收到信號前保持阻塞&#xff0c;直到其他線程顯式發出信號。…

小白學習:提示工程(什么是prompt)

課程鏈接 https://www.bilibili.com/video/BV1PX9iYQEry/?spm_id_from333.337.search-card.all.click 一 什么是提示工程 【提示工程】也叫【指令工程】 prompt就是給大模型發的指令&#xff0c;如“給我講個笑話” 懂得提示工程原理會帶來什么優勢 懂得原理 為什么有的指…

Docker Compose 之詳解(Detailed Explanation of Docker Compose)

Docker Compose 之詳解 當容器數量逐漸增多&#xff0c;你是否感到手忙腳亂&#xff1f;面對復雜的部署場景&#xff0c;是時候祭出神器Docker Compose了&#xff01;它能幫你優雅地管理多容器應用&#xff0c;一鍵啟動、停止所有服務&#xff0c;不再為復雜的手動操作焦頭爛額…

C語言 —— 此去經年夢浪蕩魂音 - 深入理解指針(卷一)

目錄 1. 內存和地址 2. 指針變量和地址 2.1 取地址操作符&#xff08;&&#xff09; 2.2 指針變量 2.3 解引用操作符 &#xff08;*&#xff09; 3. 指針的解引用 3.1 指針 - 整數 3.2 void* 指針 4. const修飾指針 4.1 const修飾變量 4.2 const修飾指針變量 5…

【AI】從頭到腳詳解如何創建部署Azure Web App的OpenAI項目

【AI】從頭到腳詳解如何創建部署Azure Web App的OpenAI項目 在Azure Web應用上,您可以使用Python的OpenAI包方便快捷地調用官方API,上傳您的訓練數據,并利用他們的算法進行處理。本教程提供了一個逐步指南,幫助您在Azure Web應用上部署您的OpenAI項目,涵蓋了從資源設置到…

機器視覺工程師紅外相機的選擇:紅外長波工業相機和短波紅外工業相機玄機大總結

紅外長波(LWIR)和短波(SWIR)工業相機在原理、應用場景和技術特點上有顯著差異。以下是它們的對比分析: 1. 波長范圍與成像原理 2. 技術特點 3. 典型應用場景 4. 優缺點對比 LWIR優勢: 無需光照,適用于完全黑暗環境。 直接反映物體溫度分布。 對煙霧、灰塵穿透能力強。…

uni-app學習筆記——自定義模板

一、流程 1.這是一個硬性的流程&#xff0c;只要按照如此程序化就可以實現 二、步驟 1.第一步 2.第二步 3.第三步 4.每一次新建頁面&#xff0c;都如第二步一樣&#xff1b;可以選擇自定義的模版&#xff08;vue3Setup——這是我自己的模版&#xff09;&#xff0c;第二步的…

DeepSeek模型本地化部署方案及Python實現

DeepSeek實在是太火了&#xff0c;雖然經過擴容和調整&#xff0c;但反應依舊不穩定&#xff0c;甚至小圓圈轉半天最后卻提示“服務器繁忙&#xff0c;請稍后再試。” 故此&#xff0c;本文通過講解在本地部署 DeepSeek并配合python代碼實現&#xff0c;讓你零成本搭建自己的AI…

Vue3計算屬性深度解析:經典場景與Vue2對比

一、計算屬性的核心價值 計算屬性&#xff08;Computed Properties&#xff09;是Vue響應式系統的核心特性之一&#xff0c;它通過依賴追蹤和緩存機制優雅地解決模板中復雜邏輯的問題。當我們需要基于現有響應式數據進行派生計算時&#xff0c;計算屬性總能保持高效的性能表現…

python-leetcode-刪除鏈表的倒數第 N 個結點

LCR 021. 刪除鏈表的倒數第 N 個結點 - 力扣&#xff08;LeetCode&#xff09; 可以使用雙指針方法來解決這個問題&#xff0c;這樣可以在一次遍歷內完成刪除操作&#xff0c;從而達到 O(n) 的時間復雜度。以下是 Python 代碼實現&#xff1a; 解題思路&#xff1a; 初始化快…