數據結構(時空復雜度)

目錄

一、算法復雜度

二、時間復雜度

1.不同時間度代碼舉例

三、空間復雜度

一、算法復雜度

????????算法復雜度(評估算法優劣一個重要指標)分為時間復雜度和空間復雜度。
????????時間復雜度是指執行算法所需要的計算工作量,而空間復雜度是指執行這個算法所需要的內存空間。
????????算法的復雜性體運行該算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間(即寄存器)資源,因此復雜度分為時間和空間復雜度。

二、時間復雜度

????????一個算法所需的運算時間通常與所解決問題的規模大小有關,即與算法中語句的執行次數成正比例,哪個算法中語句執行次數多,它花費時間就多。一個算法中的語句執行次數稱為語句頻度或時間頻度。記為T(n)。

常見的算法時間復雜度由小到大依次為:
Ο(1)<Ο(log?2n)<Ο(n)<Ο(n log?2n)<Ο(n^2)<Ο(n^3) < Ο(2^n) < Ο(n!)

1.不同時間度代碼舉例

#include <stdio.h>// O(1) 常數時間 - 訪問數組元素
int access_element(int arr[], int size) {return arr[0];
}// O(log n) 對數時間 - 二分查找
int binary_search(int arr[], int left, int right, int target) {while (left <= right) {int mid = left + (right - left) / 2;if (arr[mid] == target)return mid;if (arr[mid] < target)left = mid + 1;elseright = mid - 1;}return -1;
}// O(n) 線性時間 - 遍歷數組
void traverse_array(int arr[], int size) {for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}// O(n log n) 線性對數時間 - 歸并排序
void merge(int arr[], int left, int mid, int right) {int n1 = mid - left + 1;int n2 = right - mid;int L[n1], R[n2];for (int i = 0; i < n1; i++)L[i] = arr[left + i];for (int j = 0; j < n2; j++)R[j] = arr[mid + 1 + j];int i = 0, j = 0, k = left;while (i < n1 && j < n2) {if (L[i] <= R[j]) {arr[k] = L[i];i++;} else {arr[k] = R[j];j++;}k++;}while (i < n1) {arr[k] = L[i];i++;k++;}while (j < n2) {arr[k] = R[j];j++;k++;}
}void merge_sort(int arr[], int left, int right) {if (left < right) {int mid = left + (right - left) / 2;merge_sort(arr, left, mid);merge_sort(arr, mid + 1, right);merge(arr, left, mid, right);}
}// O(n2) 平方時間 - 冒泡排序
void bubble_sort(int arr[], int size) {for (int i = 0; i < size - 1; i++)for (int j = 0; j < size - i - 1; j++)if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}
}// O(n3) 立方時間 - 矩陣乘法
void matrix_multiply(int a[][10], int b[][10], int result[][10], int n) {for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)for (int k = 0; k < n; k++)result[i][j] += a[i][k] * b[k][j];
}// O(2^n) 指數時間 - 漢諾塔問題
void hanoi(int n, char source, char auxiliary, char target) {if (n > 0) {hanoi(n - 1, source, target, auxiliary);printf("Move disk %d from %c to %c\n", n, source, target);hanoi(n - 1, auxiliary, source, target);}
}// O(n!) 階乘時間 - 排列 (部分示例)
void permute(int arr[], int start, int end) {if (start == end) {for (int i = 0; i <= end; i++)printf("%d ", arr[i]);printf("\n");return;}for (int i = start; i <= end; i++) {int temp = arr[start];arr[start] = arr[i];arr[i] = temp;permute(arr, start + 1, end);temp = arr[start];arr[start] = arr[i];arr[i] = temp;}
}

三、空間復雜度

一個算法的空間復雜度是指程序運行開始到結束所需要的存儲空間。包括算法本身所占用的存儲空間、輸入/輸出占用的存儲空間以及算法在運行過程中的工作單元和實現算法所需輔助空間。

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

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

相關文章

ESXI8多網卡鏈路聚合

1. 背景 測試服務器只有千兆網卡&#xff0c;增加上行帶寬&#xff0c;使用兩塊網卡做鏈路聚合。 2. 環境 VM ESXI 8.0 華為交換機 S5735S 3. 交換機配置 負載均衡方式采用了src-dst-ipTrunk模式采用了手工負載分擔&#xff08;測試了靜態LACP&#xff0c;未成功&#xff09;4.…

從“人工驅動”到“AI協同”:良策金寶AI如何助力設計院數智化躍遷?

在“雙碳”目標驅動下&#xff0c;電力工程項目的數量與復雜度持續攀升。設計院面臨“項目多、周期短、人力緊”的三重壓力&#xff0c;傳統的“人工驅動”模式已難以為繼。良策金寶AI&#xff0c;正是這場變革的核心引擎。它以AI驅動數智化服務&#xff0c;為工程設計企業提供…

vue3 vite 自適應方案

兩種方案&#xff1a; 1 使用 postcss-pxtorem插件 npm install postcss-pxtorem autoprefixer --save-dev # 或 yarn add postcss-pxtorem autoprefixer -D 2、postcss-px-to-viewport npm install postcss-px-to-viewport --save-dev 或 yarn add postcss-px-to-viewport -D …

華為研發投資與管理實踐(IPD)讀書筆記

在全球科技產業競爭日趨激烈的背景下&#xff0c;企業研發管理早已告別 “依賴個體經驗、靠運氣突破” 的粗放時代&#xff0c;如何將研發創新從 “偶然成功” 轉化為 “可復制、可持續的必然成果”&#xff0c;成為所有追求長期競爭力的企業必須破解的命題。華為&#xff0c;作…

【LeetCode_283】移動零

刷爆LeetCode系列LeetCode第283題&#xff1a;github地址前言題目描述題目與思路分析代碼實現算法代碼優化LeetCode第283題&#xff1a; github地址 有夢想的電信狗 前言 本文用C實現 LeetCode 第283題 題目描述 題目鏈接&#xff1a;https://leetcode.cn/problems/move-z…

一文弄懂C/C++不定參數底層原理

目錄 一、C語言的可變參數&#xff1a;基于棧幀的手動讀取 &#xff08;1&#xff09;C函數調用的棧幀結構 &#xff08;2&#xff09;C 可變參數的 4 個核心宏&#xff1a;如何 “手動讀棧” &#xff08;3&#xff09;實戰代碼&#xff1a;用 C 可變參數實現求和函數 &a…

【Android】【設計模式】抽象工廠模式改造彈窗組件必知必會

寫一個 Android 版本的抽象工廠彈窗 Manager 管理器&#xff0c;使用 DialogFragment 實現&#xff0c;這樣能更貼近真實的開發場景。結構設計 抽象產品&#xff1a;BaseDialogFragment&#xff08;繼承 DialogFragment&#xff09;具體產品&#xff1a;LoginDialogFragment, …

Win64OpenSSL-3_5_2.exe【安裝步驟】

官網下載 注意&#xff1a;科學上網&#xff0c;可以加速下載速度&#xff01; Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 下載后得到&#xff1a;Win64OpenSSL-3_5_2.exe 雙擊安裝 修改安裝路徑&#xff1a; 默認就選擇第一個。 重要提醒?…

華為云云原生架構賦能:大騰智能加速業務創新步伐

巨大的渦輪、細小的螺絲&#xff0c;一臺航天飛機發動機的三維模型呈現在屏幕上&#xff0c;遠程同事同步協作&#xff0c;一臺復雜設備在工程師高效的協同中不斷完善。深圳市大騰信息技術有限公司&#xff0c;正是這場工業變革的推動者之一。大騰智能以“云原生工業”的融合為…

基于https+域名的Frp內網穿透教程(Linux+Nginx反向代理)

系列文章目錄 基于http公網ip的Frp內網穿透教程(win server) 基于http域名的Frp內網穿透教程(win serverIIS反向代理) 基于http公網ip的Frp內網穿透教程(Linux) 基于https域名的Frp內網穿透教程(LinuxNginx反向代理) 目錄 系列文章目錄 前言 一、Frp是什么&#xff1f; 1. …

裸機程序(1)

一、裸機裸機是一個在計算機硬件與軟件開發領域高頻出現的概念&#xff0c;核心定義是 “未安裝操作系統&#xff08;OS&#xff09;&#xff0c;僅包含硬件本身&#xff08;或僅運行最底層硬件驅動 / 控制程序&#xff09;的設備”。在電腦中&#xff0c;裸機會映射代碼到cpu&…

95%企業AI失敗?揭秘LangGraph+OceanBase融合數據層如何破局!?

本文較長&#xff0c;建議點贊收藏&#xff0c;以免遺失。更多AI大模型應用開發學習視頻及資料&#xff0c;盡在聚客AI學院。不知道你們有沒有遇到過&#xff0c;在我們一些實際落地的AI項目中&#xff0c;雖然前期“Demo 很驚艷&#xff0c;但上線后卻無人問津”。你們有沒有想…

樹莓集團產教融合:數字學院踐行職業教育“實體化運營”要求

在職業教育改革不斷深化的背景下&#xff0c;“實體化運營” 成為推動職業教育高質量發展的重要方向。樹莓集團積極響應這一要求&#xff0c;以產教融合為核心&#xff0c;打造數字學院&#xff0c;切實踐行職業教育 “實體化運營”&#xff0c;為培養高素質數字領域專業人才探…

ELK 統一日志分析系統部署與實踐指南(上)

#作者&#xff1a;張桐瑞 文章目錄1 ELK 技術棧概述1.1ELK 核心組件詳解1.2 ELK 工作流程2 ELK部署2.1 環境描述2.1.7 配置es集群下篇&#xff1a;《ELK 統一日志分析系統部署與實踐指南&#xff08;下&#xff09;》 鏈接: [https://blog.csdn.net/qq_40477248/article/detail…

上位機知識篇---poweshellcmd

要理解 PowerShell 和 CMD 的區別&#xff0c;我們可以先打個通俗的比方&#xff1a;CMD 像老式功能機&#xff0c;只能干打電話、發短信這些 “基礎活”&#xff1b;而 PowerShell 像智能手機&#xff0c;不僅能做基礎操作&#xff0c;還能裝 APP、玩復雜功能&#xff0c;甚至…

利用 Python 繪制環形熱力圖

暑假伊始&#xff0c;Coldrain 參加了學校舉辦的數模集訓&#xff0c;集訓的過程中&#xff0c;遇到了需要展示 59 個特征與 15 個指標之間的相關性的情況&#xff0c;在常用的圖表不大合適的情況下&#xff0c;學到了一些厲害的圖表&#xff0c;但是似乎千篇一律都是用 R 語言…

【序列晉升】27 Spring Cloud Sleuth給分布式系統裝上透視鏡

Spring Cloud Sleuth作為微服務架構中的核心監控組件&#xff0c;通過輕量級的無侵入式跟蹤機制&#xff0c;解決了分布式系統中請求路徑復雜、問題定位困難的痛點。它自動為每個服務請求創建唯一的Trace ID&#xff0c;并為每個服務間調用生成Span ID&#xff0c;形成完整的調…

Linux(2)|入門的開始:Linux基本指令(2)

一、基本指令介紹 回顧上篇博客Linux(1)|入門的開始&#xff1a;Linux基本指令-CSDN博客&#xff0c;我們已經學習了mkdir目錄的創建&#xff0c;touch普通文件的創建&#xff0c;光有創建肯定是不行的&#xff0c;接下來就介紹我們的刪除指令 1、rmdir指令&&rm指令 …

sv中forever如何結束

在 SystemVerilog 中&#xff0c;forever 循環本身無法自我結束。它的設計初衷就是創建一個永不終止的循環。 因此&#xff0c;要結束一個 forever 循環&#xff0c;必須從外部強制中斷它。主要有以下兩種方法&#xff1a;1. 使用 disable 語句&#xff08;最常用和推薦的方法&…

關于熵減 - 從法拉第圓盤到SEG

我們清楚的知道法拉第圓盤發電機的原理。當導線切割磁感線的時候&#xff0c;會產生電流&#xff0c;當然電流產生需要的是電動勢&#xff0c;也就是&#xff0c;這里寫 不寫 &#xff0c;避免和電場強度混淆。根據上面的分析&#xff0c;我們知道磁場強度特斯拉 的單位&#x…