【數據結構】復雜度分析

目錄

一、算法

1.基本概念

2.描述方法

3.算法效率

二、算法的時間復雜度

三、算法的空間復雜度


一、算法

1.基本概念

通俗的講,算法是解決問題的方法,比如在現實生活中一道菜譜,一個安裝輪椅的操作指南等。

嚴格的說,算法是對特定問題求解步驟的一種描述,是指令的有限序列。

算法具有的基本特性有:

(1)有窮性。一個算法必須總是在執行有窮步之后結束,且每一步都在有求時間內完成。

(2)確定性。算法中的每一條指令必須有確切的含義,不存在二意性。

(3)可行性。這個算法是可執行的。并且算法的每一條指令都可以被分解為基本的可執行的操作步驟。

一個“好”算法還具有正確性,健壯性,可理解性,抽象分級,高效性等特性。

2.描述方法

算法的描述方法可以將所設計算法中設計的求解步驟記錄下來。常用的描述算法的方法有自然語言、流程圖、程序設計語言和偽代碼等。

3.算法效率

如何衡量一個算法的效率?

????????每當算法在編寫成可執行程序后,運行時需要耗費時間資源和空間(內存)資源 。因此衡量一個算法的好壞,一般是從時間和空間兩個維度來衡量的,即時間復雜度和空間復雜度

時間復雜度 主要衡量一個算法的運行快慢。

空間復雜度 主要衡量一個算法運行所需要的額外空間。

二、算法的時間復雜度

????????撇開與計算機應硬軟件有關的因素,影響算法時間代價的最主要因素是問題規模。所以運行算法所需要的時間T就是問題規模n的函數,記作 T(n)。它定量描述了該算法的運行時間

????????一 個算法執行所耗費的時間,從理論上說,是不能算出來的,只有你把你的程序放在機器上跑起來,才能知道。但是我們需要每個算法都上機測試嗎?是可以都上機測試,但是這很麻煩,所以才有了時間復雜度這個分析方式。

????????為了客觀的反映一個算法的執行時間。可以用算法中基本語句的執行次數來度量算法的工作量(基本語句是執行次數與整個算法執行次數成正比的語句)。

????????只考察當問題規模充分大時。算法中基本語句的執行次數在漸進意義下的階稱作算法的漸進時間復雜度。簡稱為時間復雜度

????????簡而言之,一個算法所花費的時間與其中基本語句的執行次數成正比例,算法中的基本操作語句的執行次數,為算法的時間復雜度。到某條基本語句與問題規模n之間的數學表達式,就算出了該算法的時間復雜度。

????????但是,有時我們在計算基本語句的執行次數時,可能會發現有些次數計算時非常麻煩。所以實際中我們計算時間復雜度時,我們其實并不一定要計算精確的執行次數,而只需要大概執行次數,那么就需要使用大O的漸進表示法

大O的漸進表示法:

大O符號(Big O notation):是用于描述函數漸進行為的數學符號。 ?

推導大O階方法: ?

1、用常數1取代運行時間中的所有加法常數。

2、在修改后的運行次數函數中,只保留最高階項。

3、如果最高階項存在且不是1,則去除與這個項目相乘的常數。得到的結果就是大O階。

舉例:計算時間復雜度

void Func(int N)
{int count = 0;for (int k = 0; k < 2 * N; ++k){++count;}int M = 10;while (M--){++count;}printf("%d\n", count);
}

這里的問題規模是N,基本語句為++count,基本操作次數為F(N)=2N+10,那么有大O的漸進表示法就為O(n)。

常見的時間復雜度有:

三、算法的空間復雜度

????????空間復雜度也是一個數學表達式,是對一個算法在運行過程臨時占用存儲空間大小的量度

????????空間復雜度不是算程序占用了多少字節的空間,而算的是變量的個數。 空間復雜度計算規則基本跟實踐復雜度類似,也使用大O的漸進表示法

算法在運行過程中所需的存儲空間包括:

①輸入輸出數據占用的空間;②算法本身占用的空間;③執行算法需要的輔助空間。

其中,輸人輸出數據占用的空間取決于問題,與算法無關;算法本身占用的空間雖然與算法相關,但一般其大小是固定的。所以,算法的空間復雜度是指算法在執行過程中需要的輔助空間數量,也就是除算法本身和輸人輸出數據所占用的空間外,算法臨時開辟的存儲空間

????????函數運行時所需要的棧空間(存儲參數、局部變量、一些寄存器信息等)在編譯期間已經確定好了,因此空間復雜度主要通過函數在運行時候申請的額外空間來確定。

舉例1:計算空間復雜度

void Bubble_sort(int arr[], int sz)
{int i = 0;for (i = 0; i < sz - 1; i++){int flag = 0;int j = 0;for (j = 0; j < sz - 1 - i; j++){//從小到大排序if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;flag = 1;}}if (flag == 0){break;}}
}

這段代碼中所有變量均為預先確定數量的局部變量: ?int i、int flag、int j、int temp(總計4個整型變量)所以空間復雜度是O(1)。

舉例2:計算空間復雜度

long long* Fibonacci(size_t n)
{if (n == 0){return NULL;}long long* fibArray = (long long*)malloc((n + 1) * sizeof(long long));fibArray[0] = 0;fibArray[1] = 1;for (int i = 2; i <= n; ++i){fibArray[i] = fibArray[i - 1] + fibArray[i - 2];}return fibArray;
}

由于這里動態開辟了n+1個額外空間,舍去常數后,空間復雜度是O(n)

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

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

相關文章

推薦系統基礎 --ShusenWang

學習b站up主的ShusenWang的推薦系統筆記 指標 任何系統/算法/模型都需要評估&#xff0c;對于推薦系統的指標有消費指標和北極星指標&#xff0c;消費指標是衡量用戶對產品的使用情況&#xff0c;使用頻率廣度和深度&#xff0c;用于了解用戶的使用習慣&#xff0c;北極星指標是…

linux wsl2 docker 鏡像復用快速方法

GitHub項目中的devcontainer.json、Dockerfile構建了一個A項目的鏡像環境&#xff0c;現在我有一個文件夾&#xff0c;文件夾中只有一個b.py文件&#xff0c;此時我希望使用A項目的環境&#xff0c;如何實現&#xff1f;注意&#xff1a; 建議使用下面的方法2 解決方案&#xf…

(生活比喻-圖文并茂)http2.0和http3.0的隊頭阻塞,http2.0應用層解決,TCP層存在,3.0就是徹底解決,到底怎么理解區別???

說明一下&#xff1a; http屬于應用層協議&#xff0c;TCP和udp屬于傳輸層協議 文章目錄階段一&#xff1a;HTTP/1.1 的情況&#xff08;單車道收費站&#xff0c;一次過一輛&#xff09;階段二&#xff1a;HTTP/2 的情況&#xff08;多車道收費站&#xff0c;但出口只有一條路…

ARM環境openEuler2203sp4上部署19c單機問題-持續更新

問題01、報錯如下orcl:/home/oracledb15> export CV_ASSUME_DISTIDRHEL8 orcl:/home/oracledb15> $ORACLE_HOME/runInstaller -applyPSU /soft/37642901 Exception in thread "main" java.lang.UnsatisfiedLinkError: /u01/app/oracle/product/19.0.0/db_1/oui…

php成績分析系統單科分數分布分析202507

提交二維數據表&#xff0c;識別成績科目顯示科目選擇&#xff0c;選擇科目后顯示樣本數,平均分,最高分,最低分,中位數,柱狀圖圖表顯示各分值人數分布&#xff0c;表格顯示統計數據。 技術&#xff1a;html5css3ajaxphp 原生代碼實現。 效果圖&#xff1a; 下載&#xff1a; …

Redis Cluster 與 Sentinel 筆記

目錄 Redis 集群&#xff08;Cluster&#xff09;概述 Cluster 的工作原理 Cluster 配置與部署 Cluster 常見問題與限制 Redis Sentinel&#xff08;哨兵&#xff09;機制概述 Sentinel 的工作機制 Sentinel 配置與部署 Sentinel vs Cluster 總結 Redis 集群&#xff…

LLM視覺領域存在模型視覺識別不準確、細粒度視覺任務能力不足等科學問題

LLM視覺領域存在模型視覺識別不準確、細粒度視覺任務能力不足等科學問題 除了前面提到的數據集,還有一些用于評估視覺推理等能力的經典數據集。目前關于LLM視覺領域經典提示詞方面的名校或大公司論文較少,以下是相關科學問題、數據集及部分相關論文介紹: 科學問題 視覺推理…

Node.js worker_threads:并發 vs 并行

一、核心結論 Node.js 的 worker_threads 模塊實現的是 并行計算 &#xff0c;而非傳統意義上的“并發”。其通過操作系統級線程實現多核 CPU 的并行執行&#xff0c;同時保留 Node.js 單線程事件循環的并發模型。 二、關鍵概念解析 1. 并發&#xff08;Concurrency&#xff09…

gloo 多卡訓練

我們遇到了分布式訓練中的通信超時問題&#xff08;Connection closed by peer&#xff09;。根據錯誤信息&#xff0c;問題發生在梯度同步的屏障&#xff08;barrier&#xff09;操作時。以下是針對此問題的優化措施和代碼修改&#xff1a; 優化措施&#xff1a; 增強通信穩…

【Docker】在銀河麒麟ARM環境下離線安裝docker

1、前言 采用離線安裝的方式。 關于離線安裝的方式官網有介紹&#xff0c;但是說的很簡單&#xff0c;網址&#xff1a;Binaries | Docker Docs 官網介紹的有幾種主流linux系統的安裝方式&#xff0c;但是沒有kylin的&#xff0c;所以在此記錄一下。 在安裝過程中也遇到了些…

AUTOSAR進階圖解==>AUTOSAR_SWS_SOMEIPTransformer

AUTOSAR SOME/IP 轉換器規范詳解 基于AUTOSAR標準的SOME/IP轉換器協議解析與實現指南目錄 1. 介紹與功能概述2. SOME/IP架構 2.1 SOME/IP轉換器架構2.2 組件解釋2.3 層級說明 3. SOME/IP通信流程 3.1 客戶端/服務器通信序列3.2 通信流程解釋 4. SOME/IP消息結構 4.1 消息結構類…

Python 機器學習核心入門與實戰進階 Day 5 - 模型調參與交叉驗證技巧(GridSearchCV、KFold)

? 今日目標 理解模型調參的重要性&#xff08;避免欠擬合/過擬合&#xff09;掌握 GridSearchCV 的使用方法學習 K 折交叉驗證的基本流程與意義對比不同參數組合的表現使用 Pipeline 簡化流程&#xff08;進階&#xff09;&#x1f4d8; 一、調參思路方法描述Grid Search窮舉所…

Python打卡:Day47

復習日 浙大疏錦行

ACE-Step:AI音樂生成基礎模型

ACE-Step是什么 ACE-Step 是 ACE Studio 和 StepFun 聯合推出的一款開源音樂生成基礎模型&#xff0c;專為高效、連貫、可控的音樂創作而設計。它融合了擴散模型、深度壓縮自編碼器&#xff08;DCAE&#xff09;和輕量級線性變換器&#xff0c;生成速度比傳統大模型快約 15 倍…

Web前端: :is(通用選擇器)

:is(通用選擇器)CSS中的 :is() 選擇器是?個功能強?的偽類選擇器&#xff0c;它?于簡化復雜的選擇器&#xff0c;特別是在處理多個相似的選擇器時。:is() 選擇器接受 ?個選擇器列表作為參數&#xff0c;然后匹配列表中任何?個選擇器所選中的元素。:is() 選擇器核心概念基本…

【學習筆記】網絡設備(華為交換機)基礎知識 24 —— 以太網子接口基礎知識

**總結&#xff1a;分享華為交換機以太網子接口基礎知識&#xff1a;包含子接口的簡介、功能、分類以及二層以太網子接口配置終結子接口、三層以太網子接口配置終結子接口和檢查配置結果的相關命令 ** 一、子接口的概念 1、子接口的簡介以太網子接口&#xff1a;?是通過協議和…

在Docker中安裝nexus3(作為maven私服)

1. 為什么我不推薦安裝nexus2&#xff1f; 有兩個原因&#xff1a;&#xff08;1&#xff09;nexus2安裝麻煩&#xff0c;nexus3安裝更方便 &#xff08;2&#xff09;Nexus 3相對于Nexus 2進行了一些重要的改進和增強。它引入了新的存儲引擎、更多的倉庫類型支持、改進的權限…

一、MySQL 8.0 之《EXPLAIN ANALYZE 執行計劃》

文章目錄一、MySQL EXPLAIN ANALYZE 執行計劃指南主要功能實際執行性能分析詳細的執行統計性能瓶頸識別與普通 EXPLAIN 的區別使用場景查詢優化問題診斷總結二、EXPLAIN ANALYZE 執行計劃樣例分析執行順序解讀逐行詳細解釋第 7 行 (最內層)第 6 行第 5 行第 4 行第 3 行第 2 行…

Google I/O Extended :2025 Flutter 的現狀與未來

大家好&#xff0c;我是 Flutter GDE 郭樹煜&#xff0c;Github GSY 項目的維護人&#xff0c;今天主要分享的內容是「Flutter 的現狀與未來」&#xff0c;可能今天更多會是信息科普類型的內容&#xff0c;主要是分享關于 Flutter 的現狀與未來 現狀 其實 Flutter 從開源到現在…

軟考(軟件設計師)數據庫原理:事務管理,備份恢復,并發控制

數據庫事務管理與備份恢復 事務&#xff08;Transaction&#xff09; 是數據庫管理系統中執行的一個不可分割的工作單元&#xff0c;它包含一組 SQL 操作&#xff0c;這些操作要么全部成功執行&#xff0c;要么全部不執行。 事務的四大特性&#xff08;ACID&#xff09;&…