數據結構(一) 緒論

一. 時間復雜度:

? ? ? ? (1)定義:

? ? ? ? ? ? ? ?時間復雜度是衡量算法執行時間隨輸入規模(通常用n表示)增長的變化趨勢的指標,時間復雜度用O符號表示

? ? ? ? ? ? ? ? 用于描述算法在最壞情況下或平均情況下的時間需求

? ? ? ? ? ? ? ? 時間復雜度關注的是操作次數的增長率,而非具體執行時間

? ? ? ? 常見的時間復雜度由小到大依次為:

? ? ? ? ? ? ? ? O(1) < O(log2n) < O(n) < O(nlog2n) < O(n2) < O(n3) < ...... < O(2^n) < O(n!)

????????Example:

? ? ? ? ? ? ? ? 1.若一個算法需要執行 3n2 + 2n + 1 次操作,其時間復雜度為O(n2),因為最高階項n2主導增長趨勢,常數系數和低階項容易被忽略

? ? ? ? ? ? ? ? 2. O(1): 訪問數組中的某個元素

? ? ? ? ? ? ? ? 3. O(n): 遍歷數組求和

int Sum_Array(int num[]){int sum=0;for(int i=0; i<N; i++){sum += num[i];}return sum;
}

? ? ? ? 輸入規模為n, for循環執行n次,時間復雜度為O(n)

? ? ? ? ? ? ? ? 4.O(n2) : 冒泡排序

void bubbleSort(int arr[], int n){for(int i=0;i<n-1;i++){for(int j=0;j<n-i-1;j++){if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}
}

? ? ? ? for循環執行次數為n(n-1)/2,時間復雜度為O(n2)? ? ? ? ? ? ? ? ? ?

? ? ? ? (2)如何判斷時間復雜度:

? ? ? ? ? ? ? ? 1.逐層分析代碼:

? ? ? ? ? ? ? ? ? ? ? ? 單層循環 -> O(n)

? ? ? ? ? ? ? ? ? ? ? ? 雙層循環 -> O(n2)

? ? ? ? ? ? ? ? ? ? ? ? 分治算法(歸并排序) -> O(nlogn)

? ? ? ? ? ? ? ? 2.注意循環終止條件:

????????????????????????若循環變量每次乘以2(如?i *= 2),循環次數為?O(log?n)

? ? ? ? ? ? ? ? 3.遞歸:

? ? ? ? ? ? ? ? ? ? ? ? 遞歸調用次數和輸入規模有關,斐波那契數列遞歸的時間復雜度為O(2^n)

二. 空間復雜度:

? ? ? ? (1)定義:

????????????????空間復雜度衡量算法運行過程中臨時占用的存儲空間大小,同樣用大?OO?符號表示。

? ? ? ? ? ? ? ? 包括算法顯式內存(變量和數據結構)和隱式占用棧空間(遞歸調用)

? ? ? ? Example:

? ? ? ? ? ? ? ? 1.若算法需要額外創建一個長度為n的數組,則空間復雜度為O(n)

? ? ? ? ? ? ? ? 2.O(1): 交換兩個變量的值

void swap(int* a, int* b){int temp = *a;    // 僅使用一個臨時變量*a = *b;*b = temp;
}

? ? ? ? ? ? ? ? 3.O(n) : 歸并排序

? ? ? ? ? ? ? ? 4.遞歸棧空間O(n): 遞歸計算階乘

double factorial(int n){double ans = 1;if(n == 0 || n == 1) return 1;else return n * factorial(n);    // 遞歸深度為n
}

????????????????遞歸調用棧的最大深度為?nn,空間復雜度為?O(n)

? ? ? ? (2)如何判斷空間復雜度:

? ? ? ? ? ? ? ? 1.分析代碼:

? ? ? ? ? ? ? ? ? ? ? ? 若創建與輸入規模相同的數組? ? ? ? -> O(n)

? ? ? ? ? ? ? ? ? ? ? ? 若僅使用固定數量的變量? ? ? ? ? ? ? ? -> O(1)

? ? ? ? ? ? ? ? 2.遞歸調用的深度:

????????????????????????斐波那契遞歸的空間復雜度為?O(n) (最大調用深度為?n)

????????????????????????快速排序的平均遞歸深度為?O(log?n), 空間復雜度為?O(log?n)

? ? ? ? ? ? ? ? 3.動態內存分配

????????????????????????

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

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

相關文章

網絡協議與系統架構分析實戰:工具與方法全解

網絡協議與系統架構分析實戰&#xff1a;工具與方法全解 在互聯網系統的開發、運維與安全分析中&#xff0c;協議解析與抓包分析是不可或缺的核心技能。本文將系統梳理主流協議解析工具、協議自動識別方案&#xff0c;并結合實際抓包案例&#xff0c;講解如何還原和推測底層系…

發那科機器人4(編程實例)

發那科機器人4(編程實例) 一、編程實例1、直線運動實例2、圓弧運動實例3、曲線運動實例4、物料搬運實例5、異步輸送帶檢測一、編程實例 1、直線運動實例 本節內容:直線運動實例 本次實例,采用的是基礎模塊,以基礎模塊當中的四邊形為例,演示一下機器人的直線運動。 編程…

agent初識

AI Agent 時代已來&#xff1a;不止于聊天的智能體&#xff0c;將如何重塑我們的世界&#xff1f; AI Agent 時代已來&#xff1a;不止于聊天的智能體&#xff0c;將如何重塑我們的世界&#xff1f; 你是否曾驚嘆于 ChatGPT 的對答如流&#xff1f;或者 Midjourney 的妙筆生花…

.Net HttpClient 使用Json數據

HttpClient 使用Json數據 現代Web項目中&#xff0c;Json是最常用的數據格式。不論是前后端的交互中&#xff0c;還是純前端項目中&#xff0c;都是如此。因此&#xff0c;.Net HttpClient 能不能更加方便、快捷的處理Json格式數據&#xff0c;也就至關重要了&#xff01; 文末…

UDP--DDR--SFP,FPGA實現之指令監測模塊實現

指令監測模塊實現介紹 如下圖所示&#xff0c;為指令監測模塊的運行框圖 將指令設置為8bytes數據&#xff0c;故需要一個64位寄存器進行緩存&#xff0c;在進行數據緩存時&#xff0c;數據不可以輸出至下一級模塊&#xff0c;故對數據和有效指示信號也應該進行相應延遲&#…

JavaScript雙問號操作符(??)詳解,解決使用 || 時因類型轉換帶來的問題

目錄 JavaScript雙問號操作符&#xff08;??&#xff09;詳解&#xff0c;解決使用||時因類型轉換帶來的問題 一、雙問號操作符??的基礎用法 1、傳統方式的痛點 2、雙問號操作符??的精確判斷 3、雙問號操作符??與邏輯或操作符||的對比 二、復雜場景下的空值處理 …

智能體的典型應用:自動駕駛、智能客服、智能制造、游戲AI與數字人技術

本文為《React Agent&#xff1a;從零開始構建 AI 智能體》專欄系列文章。 專欄地址&#xff1a;https://blog.csdn.net/suiyingy/category_12933485.html。項目地址&#xff1a;https://gitee.com/fgai/react-agent&#xff08;含完整代碼示?例與實戰源&#xff09;。完整介紹…

Ubuntu 22.04(WSL2)使用Docker安裝Redis

Ubuntu 22.04&#xff08;WSL2&#xff09;使用Docker安裝Redis 本教程將指導您在運行于WSL2的Ubuntu 22.04上通過Docker安裝Redis 7.4.3。您將獲得一個配置了自定義設置、持久化存儲和安全選項的Redis實例。 前提條件 WSL2上已安裝Ubuntu 22.04。WSL2上已安裝并運行Docker&…

淺談 Redis 數據類型

淺談 Redis 數據類型 &#xff08;一&#xff09;String 類型 Redis 的 String 類型 是二進制安全的&#xff0c;可以用來存儲 文本字符串、int 類型數據和 bitmap 位圖 等數據。 1. 字符串操作 適用于存儲 文本、JSON、序列化數據 等任意二進制安全的內容 命令作用示例SET設…

Day1 時間復雜度

一 概念 在 C 中&#xff0c;時間復雜度是衡量算法運行時間隨輸入規模增長的趨勢的關鍵指標&#xff0c;用于評估算法的效率。它通過 大 O 表示法&#xff08;Big O Notation&#xff09; 描述&#xff0c;關注的是輸入規模 n 趨近于無窮大時&#xff0c;算法時間增長的主導因…

PAC文件:智能代理配置的瑞士軍刀

在日常上網和企業網絡環境中&#xff0c;我們經常需要配置代理服務器來訪問特定資源、增強安全性或管理網絡流量。Windows和macOS系統自帶的代理配置通常提供全局代理或簡單的排除列表&#xff0c;這在某些復雜場景下顯得不夠靈活。例如&#xff0c;我們可能只想代理某個特定的…

獲取高德地圖JS API的安全密鑰和Key的方法

要使用高德地圖JavaScript API&#xff0c;您需要獲取API Key和安全密鑰(securityJsCode)。以下是獲取步驟&#xff1a; 1. 注冊高德開放平臺賬號 首先訪問高德開放平臺&#xff0c;如果沒有賬號需要先注冊。 2. 創建應用獲取Key 登錄后進入"控制臺" 點擊"應…

攜程酒店 phantom-token token1004 分析

聲明 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 部分python代碼 搞APP搞的心態有點崩…

小紅書多賬號運營效率優化:技術方案與自動化實踐

目錄 一、效率瓶頸與流程優化方向 二、技術實現方案與效率提升路徑 1. 多賬號統一管理&#xff1a;環境隔離與批量操作 2. 自動化任務設計&#xff1a;RPA與腳本化執行 四、效果驗證與數據對比 五、總結與開源工具推薦 六、下載地址&#xff1a; 一、效率瓶頸與流程優化…

FastDDS Transport功能模塊初步整理

一. 總體結構 二. 主要類的功能 2.1 TransportDescriptor和TransportInterface ? FastDDS中整個Transport類的設計遵循的是設計模式中的建造者模式&#xff0c;其中&#xff0c;TransportDescriptor就是建造者&#xff0c;而TransportInterface則是建造出來的產品。 ? Tra…

zabbix最新版本7.2超級詳細安裝部署(一)

如果文章對你有用&#xff0c;請留下痕跡在配置過程中有問題請及時留言&#xff0c;本作者可以及時更新文章 目錄 1、提前準備環境 2、zabbix7.2安裝部署 3、安裝并配置數據庫 4、為Zabbix server配置數據庫 5、為Zabbix前端配置PHP 6、啟動Zabbix server和agent進程 7、關閉防…

CodeBlocks調試報錯

嘗試打斷點&#xff0c;并且點擊紅色箭頭啟動debugger時&#xff0c;控制臺報錯 Active debugger config: GDB/CDB debugger:Default Building to ensure sources are up-to-date Selecting target: Debug Adding source dir: C:\Users\Lenovo\Desktop\exercise\ Adding source…

Manus 開放注冊:AI 智能體領域的新起點

2025 年 5 月 13 日成為了一個具有特殊意義的日子 —— 備受矚目的 AI 智能體平臺 Manus&#xff08;Manus&#xff09;正式宣布開放注冊。這一消息猶如一顆重磅炸彈&#xff0c;瞬間在全球科技圈引起了廣泛關注和熱烈討論。在此之前&#xff0c;Manus 一直以其獨特的魅力和極高…

車載網關作為車輛網絡系統的核心樞紐

我是穿拖鞋的漢子&#xff0c;魔都中堅持長期主義的汽車電子工程師。 老規矩&#xff0c;分享一段喜歡的文字&#xff0c;避免自己成為高知識低文化的工程師&#xff1a; 鈍感力的“鈍”&#xff0c;不是木訥、遲鈍&#xff0c;而是直面困境的韌勁和耐力&#xff0c;是面對外界…

俄羅斯方塊算法2025.5.10

問題描述 俄羅斯方塊&#xff08;Tetris&#xff09;作為風靡全球38年的現象級益智游戲&#xff0c;其簡單易學但難于精通的特性使其成為游戲史上的不朽經典。以下是其核心游戲規則解析及我們的要求&#xff1a; 游戲界面由20行10列的可視區域組成&#xff0c;7種不同形狀的四…