【第一天】零基礎入門刷題Python-算法篇-數據結構與算法的介紹(持續更新)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 前言
  • 一、Python數據結構與算法的詳細介紹
    • 1.基本概念
    • 2.Python中的數據結構
      • 1. 列表(List)
      • 2. 元組(Tuple)
      • 3. 字典(Dictionary)
      • 4. 集合(Set)
      • 5. 字符串(String)
    • 3.Python中的常用算法
      • 1. 排序算法
      • 2. 搜索算法
      • 3. 遞歸算法
      • 4. 動態規劃
      • 5. 貪心算法
      • 6. 分治算法
      • 7. 回溯算法
      • 8. 圖論算法
      • 9. 字符串算法
    • 4.算法的時間復雜度和空間復雜度
      • 1. 時間復雜度
      • 2. 空間復雜度
  • 總結


前言

提示:這里可以添加本文要記錄的大概內容:

第一天Python數據結構與算法的詳細介紹
第二天五種常見的排序算法
第三天兩種常見的搜索算法
第四天兩種常見的遞歸算法
第五天一種常見的動態規劃算法
第六天一種常見的貪心算法

提示:以下是本篇文章正文內容,下面案例可供參考

一、Python數據結構與算法的詳細介紹

1.基本概念

數據結構:是指計算機中存儲和組織數據的方式。不同的數據結構適用于不同的應用場景,選擇合適的數據結構可以顯著提高程序的運行效率。數據結構涵蓋數據內容、數據之間關系和數據操作方法,具有以下設計目標:

  • 空間占用盡量少,以節省計算機內存。
  • 數據操作盡可能快速,涵蓋數據訪問、添加、刪除、更新等。
  • 提供簡潔的數據表示和邏輯信息,以便算法高效運行。

算法:是指完成特定任務的一系列步驟或規則,它在有限時間內解決特定問題的一組指令或操作步驟。算法具有以下特性:

  • 問題是明確的,包含清晰的輸入和輸出定義。
  • 具有可行性,能夠在有限步驟、時間和內存空間下完成。
  • 各步驟都有確定的含義,在相同的輸入和運行條件下,輸出始終相同。

數據結構與算法高度相關、緊密結合,具體表現在以下三個方面:

  • 數據結構是算法的基石。數據結構為算法提供了結構化存儲的數據,以及操作數據的方法。
  • 算法是數據結構發揮作用的舞臺。數據結構本身僅存儲數據信息,結合算法才能解決特定問題。
  • 算法通常可以基于不同的數據結構實現,但執行效率可能相差很大,選擇合適的數據結構是關鍵。

2.Python中的數據結構

Python內置了多種數據結構,涵蓋了常見的線性和非線性數據結構。以下是Python中一些主要的數據結構

1. 列表(List)

  1. 列表(List):Python中最常用的內置數據結構之一,可以存儲任意類型的元素,并且支持動態調整大小。 創建列表:my_list = [](空列表)或my_list = [1, 2, 3, 4, 5](包含元素的列表)。
    列表操作:添加元素my_list.append(6)、刪除元素my_list.remove(3)、訪問元素print(my_list[2])、列表切片print(my_list[1:4])。

2. 元組(Tuple)

  1. 元組(Tuple):不可變的序列,創建后不能修改。元組通常用于存儲固定數量的元素。 創建元組:my_tuple = ()(空元組)或my_tuple = (1, 2, 3, 4, 5)(包含元素的元組)。
    元組操作:訪問元素print(my_tuple[2])、元組切片print(my_tuple[1:4])。

3. 字典(Dictionary)

  1. 字典(Dictionary):鍵值對數據結構,支持快速查找、插入和刪除操作。 創建字典:my_dict = {}(空字典)或my_dict = {‘name’: ‘Alice’, ‘age’: 25, ‘city’: ‘New York’}(包含鍵值對的字典)。
    字典操作:添加或更新鍵值對my_dict[‘age’] = 26、刪除鍵值對del
    my_dict[‘city’]、訪問值print(my_dict[‘name’])、遍歷字典for key, value in
    my_dict.items(): print(f’{key}:{value}')。

4. 集合(Set)

  1. 集合(Set):無序的、不可重復的數據結構,支持集合運算如交集、并集和差集。 創建集合:my_set = set()(空集合)或my_set
    = {1, 2, 3, 4, 5}(包含元素的集合)。 集合操作:添加元素my_set.add(6)、刪除元素my_set.remove(3)、集合運算(如并集my_set.union(other_set)、交集my_set.intersection(other_set)、差集my_set.difference(other_set))。

5. 字符串(String)

  1. 字符串(String):有序字符集合,支持多種字符串操作,如拼接、切片、查找等。
    此外,Python還支持其他更復雜的數據結構,如棧(Stack)、隊列(Queue)、樹(Tree)、圖(Graph)等。

3.Python中的常用算法

以下是Python中的一些常用算法:

1. 排序算法

  1. 排序算法:將一組數據按特定順序排列。常見的排序算法有冒泡排序、選擇排序、插入排序、快速排序和歸并排序等。
  • 冒泡排序:通過重復遍歷要排序的數列,比較相鄰元素的值,若發現逆序則交換,直到沒有逆序為止。時間復雜度為O(n^2),空間復雜度為O(1)。
  • 選擇排序:每次從未排序部分選擇最小(或最大)元素,放到已排序部分的末尾。時間復雜度O(n^2),空間復雜度O(1)。
  • 插入排序:將每個新元素插入到已排序部分的適當位置。時間復雜度O(n^2)(最壞情況),空間復雜度O(1)。
  • 快速排序:選擇一個基準元素,通過一趟排序將待排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據要小,然后再按此方法對這兩部分數據分別進行快速排序,以達到整個數據變成有序序列。時間復雜度為O(n
    log n),空間復雜度為O(log n)(遞歸棧空間)。
  • 歸并排序:采用分治法,將數組分成兩半,遞歸排序后合并。時間復雜度O(n log n),空間復雜度O(n)(需要額外空間合并)。

2. 搜索算法

  1. 搜索算法:在數據集中查找特定元素。常見的搜索算法有線性搜索和二分搜索等。
  • 線性搜索:從數據集的第一個元素開始,依次比較每個元素,直到找到目標元素或搜索完整個數據集為止。時間復雜度為O(n),空間復雜度為O(1)。
  • 二分搜索:要求數據集必須是有序的,通過不斷將搜索范圍減半來查找目標元素。時間復雜度為O(log n),空間復雜度為O(1)。

3. 遞歸算法

  1. 遞歸算法:函數調用自身來解決問題的編程技巧。遞歸通常用于分治法、樹和圖的遍歷等。
  • 斐波那契數列:通過遞歸調用自身來計算斐波那契數列的第n項。時間復雜度為O(2^n),空間復雜度為O(n)(遞歸棧空間)。
  • 階乘:通過遞歸調用自身來計算一個數的階乘。時間復雜度為O(n),空間復雜度為O(n)(遞歸棧空間)。

4. 動態規劃

  1. 動態規劃:解決最優化問題,通過將問題分解為子問題,并記錄子問題的解以避免重復計算。時間復雜度和空間復雜度依具體問題而定,但通常較低于樸素遞歸解法。

5. 貪心算法

  1. 貪心算法:在每一步選擇中都采取最好或最優(即最有利)的選擇,從而希望能夠導致結果是全局最好或最優的算法。時間復雜度依具體問題而定。

6. 分治算法

  1. 分治算法
    將問題劃分為幾個規模較小的子問題分別解決,然后將子問題的解合并得到原問題的解。快速排序和歸并排序是分治算法的典型例子。

7. 回溯算法

  1. 回溯算法:通過搜索所有可能的候選解來找出所有解的算法。如果候選解被確認不是一個解(或者至少不是最后一個解),回溯算法會通過在上一步進行一些變化來丟棄該解,即“回溯”并嘗試另一個可能的候選解。時間復雜度通常很高,因為需要探索所有可能的解空間。

8. 圖論算法

  1. 圖論算法
  • 深度優先搜索(DFS)
    用途:用于圖的遍歷或路徑查找。
    時間復雜度:O(V+E),其中V是頂點數,E是邊數。
    空間復雜度:O(V)(遞歸棧空間)。
  • 廣度優先搜索(BFS)
    用途:用于圖的遍歷或最短路徑查找(無權圖)。
    時間復雜度:O(V+E)。
    空間復雜度:O(V)(隊列空間)。
  • Dijkstra算法
    用途:用于計算單源最短路徑(有權圖)。
    時間復雜度:O(V^2)(樸素實現)或O((V+E) log V)(優先隊列實現)。
    空間復雜度:O(V)。
    最小生成樹算法:
  • Prim算法
    用途:用于求解最小生成樹。
    時間復雜度:
    使用鄰接矩陣:O(V^2)。
    使用斐波那契堆等數據結構:O(E log V)。
    空間復雜度:根據具體實現而定,通常與頂點數和邊的數量相關。
  • Kruskal算法
    用途:用于求解最小生成樹。
    時間復雜度:O(E log E),其中E是邊的數量。
    空間復雜度:O(E)(存儲邊)和O(V)(并查集數據結構)。
  • Floyd-Warshall算法
    用途:用于計算所有頂點對之間的最短路徑(有權圖)。
    時間復雜度:O(V^3),其中V是頂點數。注意這里的復雜度是立方,與上述算法不同。
    空間復雜度:O(V^2)(存儲距離矩陣)。

9. 字符串算法

  1. 字符串算法
  • KMP算法:用于字符串匹配,時間復雜度O(n+m),其中n和m分別是文本和模式的長度。空間復雜度O(m)。
  • Rabin-Karp算法:基于哈希的字符串匹配算法,時間復雜度平均O(n+m),最壞O(n*m)。空間復雜度O(1)(不考慮哈希表)。

4.算法的時間復雜度和空間復雜度

1. 時間復雜度

  1. 時間復雜度:是指算法運行時間隨輸入規模增長的變化情況。常見的時間復雜度包括常數時間O(1)、線性時間O(n)、對數時間O(log n)、線性對數時間O(n log n)、平方時間O(n2)、立方時間O(n3)和指數時間O(2^n)等。

2. 空間復雜度

  1. 空間復雜度:是指算法運行時所需的存儲空間隨輸入規模增長的變化情況。空間復雜度主要衡量算法在運行過程中臨時占用存儲空間的大小。 在實際應用中,需要根據具體問題的需求和約束條件,選擇合適的數據結構和算法,以優化程序的性能。同時,也需要關注算法的時間復雜度和空間復雜度,以確保程序在可接受的范圍內運行。

總結

提示:這里對文章進行總結:
例如:以上就是今天要講的內容,本文簡單介紹數據結構與算法的介紹。

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

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

相關文章

流行的開源高性能數據同步工具 - Apache SeaTunnel 整體架構運行原理

概述 背景 數據集成在現代企業的數據治理和決策支持中扮演著至關重要的角色。隨著數據源的多樣化和數據量的迅速增長,企業需要具備強大的數據集成能力來高效地處理和分析數據。SeaTunnel通過其高度可擴展和靈活的架構,幫助企業快速實現多源數據的采集、…

消息隊列篇--原理篇--Pulsar(Namespace,BookKeeper,類似Kafka甚至更好的消息隊列)

Apache Pulusar是一個分布式、多租戶、高性能的發布/訂閱(Pub/Sub)消息系統,最初由Yahoo開發并開源。它結合了Kafka和傳統消息隊列的優點,提供高吞吐量、低延遲、強一致性和可擴展的消息傳遞能力,適用于大規模分布式系…

VS Code i18n國際化組件代碼code顯示中文配置 i18n ally

VUE項目做i18n國際化之后,代碼中的中文都變成了code這時的代碼就會顯得非常難讀,如果有一個插件能把code轉換成中文顯示就好了 vscode插件搜索“i18n ally” 在項目根文件夾下創建文件:.vscode/settings.json settings.json 內容如下 {"…

圖論匯總1

1.圖論理論基礎 圖的基本概念 二維坐標中,兩點可以連成線,多個點連成的線就構成了圖。 當然圖也可以就一個節點,甚至沒有節點(空圖) 圖的種類 整體上一般分為 有向圖 和 無向圖。 有向圖是指 圖中邊是有方向的&a…

為什么機器學習中梯度下降是減去斜率,而不是按照其數學意義減去斜率的倒數

做個簡單假設,Loss函數的某一個參數的函數曲線是二次方程,其導數函數為 r 2 ? w r 2*w r2?w 按照斜率意義來看,要減去斜率倒數 降低LOSS需要將w1更新為w2,所以更新公式為 w w ? Δ L Δ w w w - \frac{\Delta L}{\Delta w…

iptables和ipvs差異

iptables和ipvs都是Linux內核中用于網絡流量管理的工具,它們在實現方式、功能、性能以及使用場景上存在一些顯著的差異。以下是對兩者的詳細比較: 一、實現方式 iptables: 基于Netfilter框架。使用鏈表(chain)和規則&…

Effective C++ 規則51:編寫 new 和 delete 時需固守常規

1、背景 在 C 中,如果你需要為類自定義 new 和 delete,必須遵循一些約定和規則,以確保內存管理的一致性、可維護性和安全性。當我們使用 new 和 delete 操作時,C 編譯器會: 調用全局或類特定的 operator new 來分配內…

JS面相對象小案例:自定義安全數組

在JS中,數組不像其他語言(java、python)中那樣安全,它具有動態性和弱類型性,切越界訪問沒有具體的報錯,而是返回空,為提升數組的安全性,我們可以自行定義一個安全數組。 一、增加報…

本地大模型編程實戰(02)語義檢索(2)

文章目錄 準備按批次嵌入加載csv文件,分割文檔并嵌入測試嵌入效果總結代碼 上一篇文章: 本地大模型編程實戰(02)語義檢索(1) 詳細介紹了如何使用 langchain 實現語義檢索,為了演示方便,使用的是 langchain 提供的內存數據庫。 在實…

windows平臺intel-vpl編譯

需要先在本機編譯好opencl庫 git clone --recursive https://github.com/KhronosGroup/OpenCL-SDK.git cmake -A x64 -T v143 -D OPENCL_SDK_BUILD_OPENGL_SAMPLESOFF -B OpenCL-SDK\build -S OpenCL-SDKcmake --build OpenCL-SDK\build --config Releasecmake --install O…

Vue 3 30天精進之旅:Day 05 - 事件處理

引言 在前幾天的學習中,我們探討了Vue實例、計算屬性和偵聽器。這些概念為我們搭建了Vue應用的基礎。今天,我們將專注于事件處理,這是交互式Web應用的核心部分。通過學習如何在Vue中處理事件,你將能夠更好地與用戶進行交互&#…

[C語言日寄]exit函數的使用及其拓展

【作者主頁】siy2333 【專欄介紹】?c語言日寄?:這是一個專注于C語言刷題的專欄,精選題目,搭配詳細題解、拓展算法。從基礎語法到復雜算法,題目涉及的知識點全面覆蓋,助力你系統提升。無論你是初學者,還是…

React 中hooks之useSyncExternalStore使用總結

1. 基本概念 useSyncExternalStore 是 React 18 引入的一個 Hook,用于訂閱外部數據源,確保在并發渲染下數據的一致性。它主要用于: 訂閱瀏覽器 API(如 window.width)訂閱第三方狀態管理庫訂閱任何外部數據源 1.1 基…

激光雷達和相機早期融合

通過外參和內參的標定將激光雷達的點云投影到圖像上。 ? 傳感器標定 首先需要對激光雷達和相機(用于獲取 2D 圖像)進行外參和內參標定。這是為了確定激光雷達坐標系和相機坐標系之間的轉換關系,包括旋轉和平移。通常采用棋盤格等標定工具&…

Linux--權限

Linux系統的權限管理是保障系統安全的重要機制,以下詳細講解權限相關概念及操作指令: 一、基礎權限機制 1. 權限的三元組,讀(r)、寫(w)、執行(x) 每個文件或目錄有三組…

iic、spi以及uart

何為總線? 連接多個部件的信息傳輸線,是部件共享的傳輸介質 總線的作用? 實現數據傳輸,即模塊之間的通信 總線如何分類? 根據總線連接的外設屬于內部外設還是外部外設將總線可以分為片內總線和片外總線 可分為數…

“破冰”探索兩周年,AI和媒體碰撞出了什么火花?

2022年末,大模型浪潮席卷而來。在“所有行業都值得用AI重塑”的氛圍下,各個行業都受到了影響和沖擊。 其中新聞媒體可以說是受影響最為劇烈的行業。 因為內容的生產方式被重新定義,媒體從業者普遍存在焦慮情緒:擔心錯過新一輪的…

DeepSeek明確學術研究方向效果如何?

明確學術研究方向 在學術寫作中,選擇一個出色的研究主題至關重要,因為它直接關系到論文是否能登上高級別的學術期刊。不少學者在這個過程中走入了誤區,他們往往將大把的時間花在寫作本身,而忽略了對選題的深入思考,這…

WPF實戰案例 | C# WPF實現大學選課系統

WPF實戰案例 | C# WPF實現大學選課系統 一、設計來源1.1 主界面1.2 登錄界面1.3 新增課程界面1.4 修改密碼界面 二、效果和源碼2.1 界面設計(XAML)2.2 代碼邏輯(C#) 源碼下載更多優質源碼分享 作者:xcLeigh 文章地址&a…

《 C++ 點滴漫談: 二十四 》深入 C++ 變量與類型的世界:高性能編程的根基

摘要 本文深入探討了 C 中變量與類型的方方面面,包括變量的基本概念、基本與復合數據類型、動態類型與內存管理、類型推導與模板支持,以及類型系統的高級特性。通過全面的理論講解與實際案例分析,展示了 C 類型系統的強大靈活性與實踐價值。…