1、數據結構與算法(Python版-啃書)-緒論

1.1 計算機問題求解

一般而言,人們需要的不是解決一個具體問題的程序,而是解決一類問題的程序。

對于求平方根這樣的簡單問題,人們希望的也不是專用于求某個數(例如2)的平方根的函數,而是能求任何數的平方根的函數。

用計算機解決問題的過程分為兩個階段:

? ? ? ? 1、程序開發者針對要解決的問題開發出相應的程序; ---- 程序設計

? ? ? ? 2、使用者運行程序處理問題的具體實例,完成具體計算。 ---- 功能使用

1.1.1 程序開發過程

1、需求分析階段---模糊需求細化

2、設計階段---嚴格描述求解過程

3、編碼階段 -- 使用編程語言寫代碼實現

4、檢查測試階段 --- 檢查語法錯誤,修正邏輯錯誤

1.3、算法和算法分析

1.3.1、問題、問題實例和算法

算法性質:有窮性、可行性、確定性、終止性、輸入/輸出。

算法描述:問題解決的辦法,要方便人們的閱讀和使用。常見的算法:枚舉法、貪心法、分治法、回溯法、動態規劃、分值限界法等。

程序:算法的實現,算法的落地。

算法設計模式:是人們對經驗的總結,只能借鑒,不應作為教條。這些模式并不相互隔絕也不互相排斥。例如,一般而言復雜的問題都需要分解;而最簡單的情況經常可能采用枚舉和判斷的方式處理。

1.3.2、算法的代價及其度量
?

在研究現實世界中的計算問題時,必須考慮計算的代價。該算法:在求解過程中需要多少存儲空間?完成問題實例的求解需要多長時間?

同一個算法能應用于不同的實例,計算的實際代價通常與實例的規模(大小)有關。3000X3000的矩陣計算自然要比3X3的矩陣計算花費更多的時間和空間。因此,可以把一個算法的計算(時間和空間)開銷定義為問題的實例規模的函數。

算法分析就是針對一個具體算法,設法確定一種函數關系,以問題實例的某種規模n為參量,反映出這個算法在處理規模n的問題實例時需要付出的時間(或者空間)代價。

同一算法,在大規模集合操作中,比如在一個數組中查找某一個數據,可能很快就找到了,可能要耗費很長時間才能找到。因此,在有關算法的研究和分析中,人們主要關注算法的最壞情況代價,有時也關注算法的平均代價。

“大O記法"描述算法性質:

? ? ? ? 時間復雜度:T(n)=O(g(n))

? ? ? ? 空間復雜度:S(n)=O(g(n))

常用的復雜度函數:

????????O(1) ---- 常量復雜度

? ? ? ? O(log n) --- 對數復雜度

? ? ? ? O(n)? ----- 線性復雜度

? ? ? ? O(nlog n)

? ? ? ? O(n^2) --- 平方復雜度

? ? ? ? O(n^3) ---- 立方復雜度

? ? ? ? O(2^n) ---- 指數復雜度

1.3.3、算法分析

0.基本操作,認為其時間復雜度為O(1)。如果是函數調用,應該將其時間復雜度代入,參與整體時間復雜度的計算。
1.加法規則(順序復合)。如果算法(或所考慮算法片段)是兩個部分(或多個部分)的順序復合,其復雜性是這兩部分(或多部分)的復雜性之和。以兩個部分為例:
????????T(n)=Ti(n)+T(n)=O(T (n))+O(T2 (n))=O(max (T(n), T2 (n)))
其中T;(n)和T(n)分別為順序復合的兩個部分的時間復雜度。由于忽略了常量因子,加法等價于求最大值,取T(n)和 T2(n)中復雜度較高的一個。
2.乘法規則(循環結構)。如果算法(或所考慮的算法片段)是一個循環,循環體將執行T(n)次,每次執行需要T(n)時間,那么:
????????T(n)一T(n)×T2(n)=O(T (n)×O(T(n))=O(T(n)×T2(n))
3.取最大規則(分支結構)。如果算法(或所考慮算法片段)是條件分支,兩個分支的時間復雜性分別為T(n)和 T2(n),則有:
????????T(n)=O(max(T(n),T2(n)))


1.4、數據結構

數據結構(data structure)研究數據之間的關聯和組合的形式,總結其中的規律性,發掘特別值得注意的有用結構,研究這些結構的性質,進而研究如何在計算機里實現這些有用的數據結構,以支持相應組合數據的高效使用,支持處理它們的高效算法。

典型數據結構:集合結構、序列結構、層次結構、樹形結構、圖形結構

用數據結構存儲信息,不僅要考慮如何把抽象的數據結構映射到計算機或程序可以表達操作的數據存儲形式,還要考慮作用于具體數據結構的各種操作,如結構的建立、其中元素的訪問、插入或刪除元素等一般性操作。

數據結構上的操作需要通過算法實現。
?

1.4.3、python對象和數據結構

Python變量的值都是對象,可以是基本整數、浮點數等類型的對象,也可以是組合類型的對象,如 list等。

Python語言中變量的這種實現方式稱為變量的引用語義,在變量里保存值(對象)的引用。采用這種方式,變量所需的存儲空間大小一致,因為其中只需要保存--個引用。

Python里面的內存管理系統:變量在棧區,值在堆區。

?Python程序內部有一個存儲管理系統,負責管理可用內存,為各種對象安排存儲,支持靈活有效的內存使用。

python標準的數據結構:list(表)、tuple(元組)、dict(字典).

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

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

相關文章

微信小程序之將輪播圖設計為組件

在components文件夾上點右鍵,新建component,命名為swiper 然后將我們之前的代碼都拷貝到對應文件中, 然后我們的頁面要引用這個組件, 在pages\index\index.json中引入: { "usingComponents": {"van…

【視頻】解決FFmpeg將RTSP轉RTMP流時,出現的卡死、出錯等問題

【視頻】郭老二博文之:圖像視頻匯總 1、簡述 如果不修改圖像內容,可以使用FFmpeg命令來將RTSP轉RTMP流。 SRS視頻服務器就是這么干的,它沒有使用FFmpeg接口,而是直接使用FFmpeg命令來轉流。 但是在使用中,約到了一些問題,比如轉流時卡死、轉流出錯等等,下面描述怎么解…

報銷單業務筆記

文章目錄 業務點業務點-對公對私業務點-多系統標志 特殊業務入參入參報文 出參出參報文中間的邏輯多對多關系 其他應該是整體成功還是可以部分成功這種多對多關多關系有沒有優雅的判斷方式 報銷單是個通用場景,有通用邏輯,在此基礎上進行適度定制&#x…

25軟考【軟件評測師】:10天極限沖刺攻略(附知識點解析+沖刺攻略)

距離2025上半年“軟件評測師”考試已經只剩最后一周多了,還沒有準備好的小伙伴趕緊行動起來。為了幫助大家更好的沖刺學習,特此提供一份考前沖刺攻略。本指南包括考情分析、沖刺攻略兩個部分,可以參考此指南進行最后的復習要領,相…

python 的 ?uv、pip? 和 ?conda? 對比和技術選型

你好,我是 shengjk1,多年大廠經驗,努力構建 通俗易懂的、好玩的編程語言教程。 歡迎關注!你會有如下收益: 了解大廠經驗擁有和大廠相匹配的技術等 希望看什么,評論或者私信告訴我! 文章目錄 一…

Python logging模塊使用指南

Python 的 logging 模塊是一個靈活且強大的日志記錄工具,廣泛應用于應用程序的調試、運行監控和問題排查。它提供了豐富的功能,包括多級日志記錄、多種輸出方式、靈活的格式配置等。以下是詳細介紹: 一、為什么使用 logging 模塊?…

開發技術.前端開發相關問題

第一部分 響應式布局 1. 幾個布局單位概念 PX: px像素(Pixel) 相對長度單位。像素px是相對于顯示器屏幕分辨率而言的。 PX特點 1. IE無法調整那些使用px作為單位的字體大小; 2. 國外的大部分網站能夠調整的原因在于其使用了em或rem作為字體…

1. Go 語言環境安裝

👑 博主簡介:高級開發工程師 👣 出沒地點:北京 💊 人生目標:自由 ——————————————————————————————————————————— 版權聲明:本文為原創文章&#xf…

WPF自定義控件開發全指南:多內容切換與動畫集成

WPF自定義控件開發全指南:多內容切換與動畫集成 一、控件基礎架構設計1.1 選擇控件基類1.2 定義關鍵屬性 二、動畫系統集成2.1 淡入淡出動畫實現2.2 滑動動畫實現 三、視覺狀態管理四、完整使用示例4.1 XAML聲明4.2 動畫觸發邏輯 五、擴展與優化5.1 性能優化建議5.2…

數據結構 -- 順序查找和折半查找

查找的基本概念 基本概念 查找:在數據集合中尋找滿足某種條件的數據元素的過程 查找表(查找結構):用于查找的數據集合稱為查找表,它由同一類型的數據結構元素(或記錄)組成 關鍵字&#xff1…

汽車功能安全--TC3xx MBIST設計要點

英飛凌針對硬件故障的自測,提供了四種機制:PBIST、LBIST、MONBIST和MBIST。 LBIST和MONBIST我們已經聊過了,今天就快速介紹下MBIST。 MBIST,全程Memory Built-in Self Test,用于檢測SRAM數據單元的完整性。 在26262…

openpi 入門教程

系列文章目錄 目錄 系列文章目錄 前言 一、運行要求 二、安裝 三、模型檢查點 3.1 基礎模型 3.2 微調模型 四、運行預訓練模型的推理 五、在自己的數據上微調基礎模型 5.1. 將數據轉換為 LeRobot 數據集 5.3. 啟動策略服務器并運行推理 5.4 更多示例 六、故障排除…

java加強 -Collection集合

集合是一種容器,類似于數組,但集合的大小可變,開發中也非常常用。Collection代表單列集合,每個元素(數據)只包含1個值。Collection集合分為兩類,List集合與set集合。 特點 List系列集合&#…

深入理解ThingsBoard的Actor模型

1、ThingsBoard系統中定義了哪些Actor ? ThingsBoard Actor 創建機制與作用對照表: Actor 類型 何時創建 由誰創建 是否緩存 作用描述 SystemActor 系統啟動時 DefaultActorService / ActorSystem ? 是 ★ ThingsBoard 平臺服務級別管理器:負責創建所有的Actor AppActor

WPS一旦打開,就會修改默認打開方式,怎么解?

目錄 前言 解決方法 結語 前言 電腦上同時存在WPS和微軟的Office全家桶,但是我更喜歡用Office全家桶。前幾天剛在設置改過來,忘記更改pdf文件打開默認應用。結果沒過幾天,不小心用WPS打開pdf文件時候,給我把默認設置全改回去了…

深度學習中--模型調試與可視化

第一部分:損失函數與準確率的監控(Loss / Accuracy Curve) 1. 為什么要監控 Loss 與 Accuracy? Loss 是模型優化的依據,但它可能下降了 Accuracy 反而沒變(過擬合信號) Accuracy 才是評估效果的…

中間件-RocketMQ

RocketMQ 基本架構消息模型消費者消費消息模式順序消息機制延遲消息批量消息事務消息消息重試最佳實踐 基本架構 nameServer: 維護broker列表信息,客戶端連接時只需要連接nameServer。可配置成集群。 broker:broker分為master和slave,master負…

anaconda3如何切換虛擬環境

在 Anaconda3 中切換虛擬環境可以通過 命令行 或 Anaconda Navigator 圖形界面實現。以下是詳細步驟: 方法1:通過命令行切換(推薦) 1. 查看所有虛擬環境 conda env list # 或 conda info --envs 輸出示例: base …

【vue】axios網絡請求介紹

一、基礎使用 1.引入js文件 2.在methods中的函數里寫 axios.get(路徑) .then((res))>{ console.log(res.data);//控制臺打印結果數據 this.listArrres.data//定義數組來接收返回來的數據 }) 二、參數傳遞 參數傳遞一般在路徑后面使用 params:{ num:2,…

機器學習 --- KNN算法

機器學習 — KNN算法 文章目錄 機器學習 --- KNN算法一,sklearn機器學習概述二,KNN算法---分類2.1樣本距離判斷2.2 KNN算法原理2.3 KNN缺點2.4 API2.5 使用sklearn中鳶尾花數據集實現KNN 一,sklearn機器學習概述 獲取數據、數據處理、特征工…