【數據結構篇】算法征途:穿越時間復雜度與空間復雜度的迷霧森林

文章目錄

  • 【數據結構篇】算法征途:穿越時間復雜度與空間復雜度的迷霧森林
    • 一、 什么是算法
        • 1. 算法的定義
          • 1.1 算法的五個特征
          • 1.2 好算法的特質
        • 2. 時間復雜度
        • 3. 空間復雜度


【數據結構篇】算法征途:穿越時間復雜度與空間復雜度的迷霧森林

💬歡迎交流:在學習過程中如果你有任何疑問或想法,歡迎在評論區留言,我們可以共同探討學習的內容。你的支持是我持續創作的動力!
👍點贊、收藏與推薦:如果你覺得這篇文章對你有所幫助,請不要忘記點贊、收藏,并分享給更多的小伙伴!你們的鼓勵是我不斷進步的源泉!
🚀推廣給更多人:如果你認為這篇文章對你有幫助,歡迎分享給更多對機器學習感興趣的朋友,讓我們一起進步,共同提升!

一、 什么是算法

程序 = 數據結構 + 算法

1. 算法的定義

算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中的每條指令表示一個或多個操作。

此外,算法還有五個重要的特征
1. 有窮性
2. 確定性
3. 可行性
4. 輸入
5. 輸出

接下來我們分別來看這五個特性

1.1 算法的五個特征

1. 有窮性
一個算法必須在有窮步之后結束,且每一步都可在有窮時間內完成。
這里需要注意的是 算法必須是有窮的,而程序可以是無窮的。
2. 確定性
算法中每條指令必須有確切的含義,對于相同的輸入只能得出相同的輸出。
3. 可行性
算法中描述的操作都可以通過已經實現的基本運算執行有限次來實現。
4. 輸入
一個算法有零個或多個輸入,這些輸入取自于某個特定的對象的集合
5. 輸出
一個算法有一個或多個輸入,這些輸出是與輸入有著某種特定關系的量

1.2 好算法的特質

1. 正確性
算法應該可以正確地解決求解的問題
2. 可讀性
算法應具有良好的可讀性,以幫助人們可以理解
3. 健壯性
輸入非法數據時,算法能適當地做出反應或進行處理,而不會產生莫名奇妙的輸出結果
4. 高效率與低存儲量要求
高效率代表花費的時間少 時間復雜度低
低存儲量需求是不費內存 空間復雜度低

  • 總結:
    在這里插入圖片描述
2. 時間復雜度

可以事先預估時間開銷T(n) 與問題規模n 的關系 (T 表示“time”)
這里我們用一串代碼來看下

#include <stdio.h>// 遞增形love you!
void loveyou(int n){ // n 為問題規模int i = 1;while(i <= n){printf("love you %d\n", i);i++;}printf("I love you too!\n");
}int main(){loveyou(500);return 0;
}

上述代碼結果:
在這里插入圖片描述
這里我們問題規模是 500 所以我們的:是T(500) = 1 + 501 + 2*500 + 1

如果把500換成n的話 那么
表達式:T(n) = 3n + 3

但是如果表達式多了怎么辦呢 那么
T1(n) = 3n + 3
T2(n) = n2+3n + 1000
T3(n) = n3+ n2 + 9999999

若 n = 3000 ,則 :

3n = 9000 比 T1(n) = 3n + 3 =9003
n2=9,000,000 比T2(n) = n2+3n + 1000 = 9,010,000
n3=27,000,000,000 比 T3(n) = n3+ n2 + 9999999 = 27,018,999,999

這時我們可以發現 我們可以只考慮階數高的部分 可以簡化下:
T1(n) = O(n)
T2(n) = O(n2)
T3(n) = O(n3)

在這里插入圖片描述

算法的復雜度:
最壞時間復雜度: 最壞情況下算法的時間復雜度
平均時間復雜度:所有輸入示例等概率出現的情況下,算法的期望運行時間

  • 總結
    在這里插入圖片描述
3. 空間復雜度
#include <stdio.h>// 遞增形love you!
void loveyou(int n){ // n 為問題規模int i = 1;while(i <= n){printf("love you %d\n", i);i++;}printf("I love you too!\n");
}int main(){loveyou(500);return 0;
}

解釋: 當我們編輯好這段代碼是 其實需要占多少空間 是已經固定的 這片空間的大小 其實是跟我們問題規模沒有關系的
我們在調用這段代碼時 其實會傳入一個int型的參數
然后我們還定義了一個int型的變量i(int i = 1)

這里需要注意的是 int n (這里的n指的是問題規模)但是不管n的值怎么變化 這個算法執行中 都是一個固定不變的常數值。
無論問題規模怎么變,算法運行所需的內存空間都是固定的常量。
所以這里的算法的空間復雜度
常數階:S(n) = O(1)

  • 注 S表示的是"Space"

并且還需要注意的是 如果是常數階的話 那么我們就可以稱這種算法可以原地工作
我們來看一段簡單的示例代碼:

void test(int n){int flag[0];//聲明長度為n的數組int i;//.....此處省略很多代碼

在這里插入圖片描述
我們經過上一個例子可以看出 和問題規模是沒有關系的 那么這里我們假設int型變量占的是4個字節(4B)
則所需內存空間 = 4+ 4n + 4 = 4n + 8
那我們就可以寫成 S(n) = O(4n + 8) 他的階數為n 那么
空間復雜度其實是 S(n) = O(n)

我們其實可以看出 如果在函數當中我們定義了某種變量,但是這個變量所占的空間和問題規模n沒有關系的話 這個類型的變量 最多也就是在我們的表達式當中 給我們增添一個常數項 但我們最終要轉換成大O表示法 也就是關心階數的 所以這種常數項 對我們最終結果不會產生任何結果
因此:我們只需要關注存儲空間的大小與問題規模相關的變量就可以了

在這里插入圖片描述


你好,我是意疏。我們一起進步。

在這里插入圖片描述

意氣風發,漫卷疏狂
學習是成長的階梯,每一次`的積累都將成為未來的助力。我希望通過持續的學習,不斷汲取新知識,來改變自己的命運,并將成長的過程記錄在我的博客中

如果我的博客能給您帶來啟發,如果您喜歡我的博客內容,請不吝點贊、評論和收藏,也歡迎您關注我的博客。
您的支持是我前行的動力。聽說點贊會增加自己的運氣,希望您每一天都能充滿活力!

愿您每一天都快樂,也歡迎您常來我的博客。我叫意疏,希望我們一起成長,共同進步。
logo
我是意疏 下次見!

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

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

相關文章

Logo語言的系統監控

Logo語言的系統監控 引言 在信息技術飛速發展的時代&#xff0c;系統監控成為了確保計算機系統和網絡平穩運行的重要手段。系統監控不僅可以實時跟蹤系統的性能、資源使用情況和安全風險等&#xff0c;還能夠在出現問題時及時發出警報&#xff0c;從而避免潛在的故障和損失。…

STP學習

{所有內容均來自于西安歐鵬的陳俊老師} STP生成樹 當二層交換機意外成環路的時候會發生&#xff1a; 1.廣播風暴&#xff1a;當廣播幀進入環路時&#xff0c;會被不斷復制并傳輸&#xff0c;導致網絡中的廣播流量急劇增加&#xff0c;消耗大量的網絡帶寬&#xff0c;降低網絡…

使用RKNN進行yolo11-cls部署

文章目錄 概要制作數據集模型訓練onnx導出rknn導出概要 YOLO(You Only Look Once)是一系列高效的目標檢測算法,其核心思想是將目標檢測任務轉化為一個回歸問題,通過單個神經網絡直接在圖像上預測邊界框和類別概率。當將其用于分類任務時,會去除目標檢測相關的邊界框預測部…

【MySQL】01.MySQL環境安裝

注意&#xff1a;在MYSQL的安裝與卸載中&#xff0c;需要使用root用戶進行。 一、卸載不必要的環境 ? 查看是否有運行的服務 [rootVM-24-10-centos etc]# ps axj |grep mysql1 22030 22029 22029 ? -1 Sl 27 0:00 /usr/sbin/mysqld --daemonize --pid-fi…

程序化廣告行業(59/89):廣告驗證與反作弊實戰技巧

程序化廣告行業&#xff08;59/89&#xff09;&#xff1a;廣告驗證與反作弊實戰技巧 大家好&#xff01;在程序化廣告領域&#xff0c;想要做好投放&#xff0c;除了了解基本的架構和原理&#xff0c;還得掌握一些關鍵的技能&#xff0c;比如廣告驗證和反作弊。今天就和大家一…

矢量瓦片切片工具

1.geoserver 可以生成geojson mvt(pbf) tojson 三種格式矢量瓦片 2.mapbox的tippecanoe 可以生成pbf矢量瓦片&#xff0c;文件夾形式和mbtiles兩種 3.TileStache python工具&#xff0c;可以生成geojson瓦片 4.PostGis mapbox插件可以生成pbf瓦片&#xff0c;據說是動態切片…

Windows 系統 Git 2.15.0 (64位) 下載與安裝教程

1. 下載 Git 2.15.0 (64位) 安裝包 下載地址&#xff1a;https://pan.quark.cn/s/f817ab9285dc 2. 運行安裝程序 雙擊下載的 Git-2.15.0-64-bit.exe。 如果系統提示安全警告&#xff0c;選擇 “運行”&#xff08;確認來源可信&#xff09;。 3. 安裝向導設置 按以下步驟配…

MCP服務器:AI與外部工具交互的橋梁——Python和代理AI工具集成指南

&#x1f9e0; 向所有學習者致敬&#xff01; “學習不是裝滿一桶水&#xff0c;而是點燃一把火。” —— 葉芝 我的博客主頁&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 歡迎點擊加入AI人工智能社區&#xff01; &#x1f680; 讓我們一起努力&#xff0c;共創…

AIGC8——大模型生態與開源協作:技術競逐與普惠化浪潮

引言&#xff1a;大模型發展的分水嶺時刻 2024年成為AI大模型發展的關鍵轉折點&#xff1a;OpenAI的GPT-4o實現多模態實時交互&#xff0c;中國DeepSeek-MoE-16b模型以1/8成本達到同類90%性能&#xff0c;而開源社區如Mistral、LLama 3持續降低技術門檻。這場"閉源商業巨…

Muduo網絡庫實現 [十五] - HttpContext模塊

目錄 設計思路 類的設計 解碼過程 模塊的實現 私有接口 請求函數 解析函數 公有接口 疑惑點 設計思路 記錄每一次請求處理的進度&#xff0c;便于下一次處理。 上下文模塊是Http協議模塊中最重要的一個模塊&#xff0c;他需要記錄每一次請求處理的進度&#xff0c;需…

解決GraalVM Native Maven Plugin錯誤:JAVA_HOME未指向GraalVM Distribution

目錄 問題描述解決方案為什么需要這樣配置&#xff1f; 問題描述 在你的項目中&#xff0c;如果你遇到了以下錯誤信息&#xff1a; [ERROR] Failed to execute goal org.graalvm.buildtools:native-maven-plugin:0.10.5:test (native-test) on project DIctSystemInJavaUsing…

java 代碼錯誤分析

錯誤代碼 class Test {private static String name; // 聲明一個私有靜態變量 namename "World"; // 靜態初始化塊&#xff0c;給 name 賦值為 "World"System.out.print(name); // 打印 name 的值public static void main(String[] args) {System.out.p…

企業供應鏈管理

企業供應鏈管理 企業供應鏈管理 企業供應鏈管理企業信息化信息化的作用信息化的發展階段信息化建設的挑戰 SRM&#xff08;供應商關系管理&#xff09;SRM架構參考圖企業內部系統協作&#xff1a; ERP (企業資源計劃)OA (辦公自動化)業務功能模塊&#xff1a;企業日常辦公 EMS …

Pascal語言的系統監控

Pascal語言的系統監控 引言 在現代計算機系統中&#xff0c;系統監控是確保計算機平穩運行的重要組成部分。無論是個人計算機還是大型服務器&#xff0c;監控系統的性能、資源使用及狀態&#xff0c;都是提高系統效率、及時發現問題的關鍵。Pascal語言作為一種結構化編程語言…

出現次數超過一半的數(信息學奧賽一本通-1186)

【題目描述】 給出一個含有n&#xff08;0 < n < 1000&#xff09;個整數的數組&#xff0c;請找出其中出現次數超過一半的數。數組中的數大于-50且小于50。 【輸入】 第一行包含一個整數n&#xff0c;表示數組大小&#xff1b; 第二行包含n個整數&#xff0c;分別是數組…

解決 CANoe 多測試用例下固定 IP 地址沖突問題的分析與方案

問題描述&#xff1a; CANoe的測試環境如下&#xff1a; 在Ethernet1總線上&#xff0c;通過VN5620連接了PCU&#xff08;實物&#xff09;&#xff1b; 使用VtestStudio&#xff08;VTS&#xff09;開發&#xff0c;并且生成了三個測試腳本(vtt文件)&#xff0c;分別為&#…

React 項目使用 pdf.js 及 Elasticpdf 教程

摘要&#xff1a;本文章介紹如何在 React 中使用 pdf.js 及基于 pdf.js 的批注開發包 Elasticpdf。簡單 5 步可完成集成部署&#xff0c;包括數據的云端同步&#xff0c;示例代碼完善且簡單&#xff0c;文末有集成代碼分享。 1. 工具庫介紹與 Demo 1.1 代碼包結構 ElasticP…

python爬蟲:小程序逆向(需要的工具前期準備)

前置知識點 1. wxapkg文件 如何查看小程序包文件 打開wechat的設置&#xff1a; .wxapkg概述 .wxapkg是小程序的包文件格式&#xff0c;且其具有獨特的結構和加密方式。它不僅包含了小程序的源代碼&#xff0c;還包括了圖像和其他資源文件&#xff0c;這些內容在普通的文件…

Prolog語言的強化學習

Prolog語言的強化學習 引言 強化學習&#xff08;Reinforcement Learning, RL&#xff09;是機器學習的一個重要分支&#xff0c;它通過與環境交互來學習最優策略&#xff0c;以最大化累積獎勵。在強化學習中&#xff0c;智能體&#xff08;Agent&#xff09;通過試錯方式與環…

開源且完全沒有審核限制的大型語言模型的概述

開源且完全沒有審核限制的大型語言模型的概述 關鍵要點 研究表明&#xff0c;存在多個開源的大型語言模型&#xff08;LLM&#xff09;完全沒有審核限制&#xff0c;適合開放對話。包括基于 Llama、Mixtral、Phi-2 和 StableLM 的模型&#xff0c;參數范圍從 2.78 億到 4050 億…