【數據結構】時間和空間復雜度

?馬上就要進入到數據結構的學習了 ,我們先來了解一下時間和空間復雜度,這也可以判斷我們的算法是否好壞;


如何衡量一個算法的好壞?

就是看它的算法效率

算法效率

算法效率分析分為兩種:第一種是時間效率,第二種是空間效率。時間效率被稱為時間復雜度,而空間效率被稱作空間復雜度。 時間復雜度主要衡量的是一個算法的運行速度而空間復雜度主要衡量一個算法所需要的額外空間,在計算機發展的早期,計算機的存儲容量很小。所以對空間復雜度很是在乎。但是經過計算機行業的迅速發展,計算機的存儲容量已經達到了很高的程度。所以我們如今已經不需要再特別關注一個算法的空間復雜度。


時間復雜度?

時間復雜度的定義:在計算機科學中,算法的時間復雜度是一個數學函數,它定量描述了該算法的運行時間。一個算法執行所耗費的時間,從理論上說,是不能算出來的,只有你把你的程序放在機器上跑起來,才能知道。但是我們需要每個算法都上機測試嗎?是可以都上機測試,但是這很麻煩,所以才有了時間復雜度這個分析方式。一個算法所花費的時間與其中語句的執行次數成正比例,算法中的基本操作的執行次數,為算法的時間復雜度。?


大O的漸進表示法

實際中我們計算時間復雜度時,我們其實并不一定要計算精確的執行次數,而只需要大概執行次數,那么這里我們使用大O的漸進表示法。?

Func?執行的基本操作次數 :

F(N)=N^2+2N+10

但是如果N無限大呢?

N=10? F(N) = 130

N=100? F(N) =10210

N=1000 F(N)=1002010?

因此我們有以下結論:

1、用常數1取代運行時間中的所有加法常數。F(N)=N^2+2N+10
2、在修改后的運行次數函數中,只保留最高階項。F(N)=N^2
3、如果最高階項存在且不是1,則去除與這個項目相乘的常數。得到的結果就是大O階。?

假如 F(N) = 3N^2

那么3省略 F(N) = N^2?

所以 大O為O(N^2)

另外有些算法的時間復雜度存在最好、平均和最壞情況:
最壞情況:任意輸入規模的最大運行次數(上界)
平均情況:任意輸入規模的期望運行次數
最好情況:任意輸入規模的最小運行次數(下界)?

例如:在一個長度為N數組中搜索一個數據x

最好情況:1次找到
最壞情況:N次找到
平均情況:N/2次找到

在實際中一般情況關注的是算法的最壞運行情況,所以數組中搜索數據時間復雜度為O(N)?


常見時間復雜度計算舉例?

?

?F(N) = 2N+10

根據公式 F(N)=N;

所以就是O(N)

?

M和N都為未知數

F(N)=M+N;

所以就是O(M+N)?

F(N)=100;

所以F(N)=1;

所以就是O(1);?

?

有最好情況下也有最壞情況下,一般我們只考慮最壞情況下?

?

二分查找的時間復雜度為O(logN)?

?

一般情況下 遞歸的時間復雜度就為 遞歸的次數*每次遞歸執行的次數?

?

這個斐波那契遞歸得畫圖分析

所以大O為O(2^N)?

?空間復雜度

空間復雜度是對一個算法在運行過程中臨時占用存儲空間大小的量度 。空間復雜度不是程序占用了多少bytes的空間,因為這個也沒太大意義,所以空間復雜度算的是變量的個數。空間復雜度計算規則基本跟時間復雜度類似,也使用大O漸進表示法

?

空間復雜度為O(1)?

因為沒有申請其他的數組,只使用了原來的數組

時間復雜度為O(N)?

因為申請了一個其他數組

?

遞歸調用了N次,開辟了N個棧幀,每個棧幀使用了常數個空間。空間復雜度為O(N)?


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

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

相關文章

C++ Qt QVariant類型使用介紹與代碼演示

作者:令狐掌門 技術交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目錄 一、QVariant基本用法二、自定義類型使用QVariant三、其它用法賦值修改和替換值使用`QVariant::setValue()`設置值復制構造函數和賦值操作比較使用`QVariant::swap()`交換值使…

CVE-2023-22515:Atlassian Confluence權限提升漏洞復現 [附POC]

文章目錄 Atlassian Confluence權限提升(CVE-2023-22515)漏洞復現 [附POC]0x01 前言0x02 漏洞描述0x03 影響版本0x04 漏洞環境0x05 漏洞復現1.訪問漏洞環境2.構造POC3.復現 0x06 修復建議 Atlassian Confluence權限提升(CVE-2023-22515)漏洞復現 [附POC] 0x01 前言 免責聲明&…

vue中下載文件后無法打開的坑

今天在項目開發的時候臨時要添加個導出功能我就寫了一份請求加導出得代碼, 代碼: //導出按鈕放開exportDutySummarizing (dataRangeInfo) {const params {departmentName: dataRangeInfo.name,departmentQode: dataRangeInfo.qode}//拼接所需得urlcons…

UserRole

Qt::UserRole 是 Qt::ItemDataRole 枚舉中的一個成員,用于表示自定義數據角色(Data Role)的起始值。 在 Qt 中,Qt::ItemDataRole 枚舉用于標識項(Item)中不同類型的數據。這些數據角色包括 Qt::DisplayRol…

目標檢測YOLO系列從入門到精通技術詳解100篇-【目標檢測】紅外熱成像

目錄 前言 知識儲備 紅外熱成像儀基礎知識 算法原理 紅外熱成像探測距離 紅外圖像增強

第一百七十八回 介紹一個三方包組件:SlideSwitch

文章目錄 1. 概念介紹2. 使用方法3. 代碼與效果3.1 示例代碼3.2 運行效果 4. 內容總結 我們在上一章回中介紹了"如何創建垂直方向的Switch"相關的內容,本章回中將 介紹SlideSwitch組件.閑話休提,讓我們一起Talk Flutter吧。 1. 概念介紹 我們…

多功能智能燈桿主要功能有哪些?

多功能智能燈桿這個詞相信大家都不陌生,最近幾年多功能智能燈桿行業發展迅速,迅速取代了傳統路燈,那么多功能智能燈桿相比傳統照明路燈好在哪里呢,為什么大家都選擇使用叁仟智慧多功能智能燈桿呢?所謂多功能智能燈桿著…

【libGDX】Mesh紋理貼圖

1 前言 紋理貼圖的本質是將圖片的紋理坐標與模型的頂點坐標建立一一映射關系。紋理坐標的 x、y 軸正方向分別朝右和朝下,如下。 2 紋理貼圖 本節將使用 Mesh、ShaderProgram、Shader 實現紋理貼圖,OpenGL ES 的實現見博客 → 紋理貼圖。 DesktopLauncher…

超級應用平臺(HAP)起航

各位明道云用戶和伙伴, 今天,我們正式發布明道云10.0版本。從這個版本開始,我們將產品名稱正式命名為超級應用平臺(Hyper Application Platform, 簡稱HAP)。我們用“超級”二字表達產品在綜合能力方面的突破&#xff…

清華系下一代 LCM

LCM LoRA模型是一種創新的深度學習模型,它通過特殊的技術手段,顯著提高了圖像生成的效率。這種模型特別適用于需要快速生成高質量圖像的場景,如藝術創作、實時圖像處理等。 GitHub - luosiallen/latent-consistency-model: Latent Consistenc…

視頻監控中的智能算法與計算機視覺技術

智能視頻監控是一種基于人工智能技術的監控系統,它能夠通過對圖像和視頻數據進行分析,自動識別目標物體、判斷其行為以及進行異常檢測等功能,從而實現對場景的智能化監管。以下是常見的一些用于智能視頻監控的算法: 1、人臉識別技…

RabbitMQ簡易安裝

一般來說安裝 RabbitMQ 之前要安裝 Erlang ,可以去Erlang官網下載。接著去RabbitMQ官網下載安裝包,之后解壓縮即可。 Erlang官方下載地址:Downloads - Erlang/OTP RabbitMQ官方下載地址:Downloading and Installing RabbitMQ —…

org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder

密碼,加密,解密 spring-security-crypto-5.7.3.jar /** Copyright 2002-2011 the original author or authors.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with t…

Kafka(一)

一:簡介 解決高吞吐量項目的需求 是一款為大數據而生的消息中間件,具有百億級tps的吞吐量,在數據采集、傳輸、存儲的過程中發揮著作用 二:為什么要使用消息隊列 一個普通訪問量的接口和一個大并發的接口,它們背后的…

C/C++---------------LeetCode第1512. 好數對的數目

好數對的數目 題目及要求暴力算法哈希算法在main內使用 題目及要求 給你一個整數數組 nums 。 如果一組數字 (i,j) 滿足 nums[i] nums[j] 且 i < j &#xff0c;就可以認為這是一組 好數對 。 返回好數對的數目。 示例 1&#xff1a; 輸入&#xff1a;nums [1,2,3,1,…

376.擺動序列

原題鏈接&#xff1a;376.擺動序列 全代碼&#xff1a; class Solution { public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 1) return nums.size();int curDiff 0; // 當前一對差值int preDiff 0; // 前一對差值int result 1; // 記錄峰…

Android骨架圖

用法&#xff1a;在圖片上實現動畫效果 <FrameLayoutandroid:id"id/image_container"android:layout_width"match_parent"android:layout_height"wrap_content"><ImageViewandroid:id"id/ivBlank"android:layout_width"…

PostgreSQL Patroni 3.0 新功能規劃 2023年 紐約PG 大會 (音譯)

開頭還是介紹一下群&#xff0c;如果感興趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有問題&#xff0c;有需求都可以加群群內有各大數據庫行業大咖&#xff0c;CTO&#xff0c;可以解決你的問題。加群請聯系 liuaustin3 &#xff0c;&#xff08;…

React Hooks函數之useRef

useRef 是 React 中常用的 Hook 之一&#xff0c;它返回一個可變的 ref 對象&#xff0c;其 .current 屬性被初始化為傳入的參數&#xff08;initialValue&#xff09;。返回的 ref 對象在組件的整個生命周期內保持不變。 以下是一些使用 useRef 的場景和示例&#xff1a; 1、…

Mathorcup數學建模競賽第一屆-【媽媽杯】B題:圖像識別

目錄 知識儲備 傳統圖像處理方法進行瑕疵檢測 傳統算法方向的選擇 瑕疵檢測關注的兩個問題 瑕疵的標注