算法设计与分析python_Python算法设计与分析
內容提要
本書內容包括算法初步、排序算法、查找、雙指針問題、哈希算法、深度優先搜索算法、廣度優先搜索算法、回溯算法、動態規劃、貪心算法、分治算法、并查集、最短路徑算法和數論算法等常見算法。每個算法都做了深入的講解,同時通過實例介紹了如何應用這些算法。書中算法都以Python語言進行描述。本書的特色在于講解知……
前言
為什么要寫這本書本書是講解算法的教材。為幫助大家理解,書中使用了大量的代碼和圖表。學習算法不是一件容易的事情,再加上復雜的場景和數學理論,會讓算法的學習曲線更陡。因此,本書盡量使用通俗易懂的語言描述。同時,我們選擇了 Python 這門簡單易懂的語言作為本書的編程語言。對于初學編程的人來說,Py……
第1章 算法初步
1.1 什么是算法1.1.1 算法的定義對算法的解釋,從古至今定義是不唯一的。本書給出的算法的定義是:一系列用來解決單個或多個問題,或有執行計算功能的命令的集合。而聯系上輸入與輸出,算法就是將輸入轉換為輸出的一系列計算步驟的集合。生動地講,可以把一個程序比作一道菜。如圖1-1所示,做菜的原材料就……
第2章 排序算法
排序通常指把毫無規律的數據,按照一種特定的規律,整理成有序排列的狀態。一般情況下,排序算法按照關鍵字的大小,以從小到大或從大到小的順序將數據排列。排序算法是最基礎也是最重要的算法之一,在處理大量數據時,使用一個優秀的排序算法可以節省大量時間和空間。因為不同的排序算法擁有不同的特點,所以我們應根據情……
第3章 查找
查找的定義為:在一個數據元素集合中,通過一定的方法確定與給定關鍵字相同的數據元素是否存在于集合中。一般來說,如果查找成功,程序會返回數據的位置或相關信息;如果查找失敗,則返回相應的提示。查找的方法可以分為兩種:比較查找法與計算式查找法。比較查找法基于兩種數據結構:線性表和樹。查找的對象(一般是由同……
第4章 雙指針問題
指針存儲著計算機中一個內存空間的地址,它是編程語言中的一個對象。通過它存儲的地址,計算機可以找到存儲在計算機存儲器中另一個地方的變量單元。一個特定的地址指針指向一個特定的變量單元。在重復讀取數據的情況下,使用指針可以改善程序性能。同時,指針還可以有效利用存儲器中非連續的內存。4.1 單鏈表鏈表是……
第5章 哈希算法
哈希算法也是一種查找算法,可以說哈希算法是最快的查找算法。對于查找問題而言,哈希算法一直是首選算法。5.1 哈希算法的原理在日常生活中,信息的重要性不言而喻,我們常常需要使用搜索引擎來解決日常生活中的大量問題,其中的一項關鍵技術就是數據查找算法。因此,如何提高數據查找的效率是我們不斷追求的目標。……
第6章 深度優先搜索算法
深度優先搜索算法是經典的圖論算法,深度優先搜索算法的搜索邏輯和它的名字一樣,只要有可能,就盡量深入搜索,直到找到答案,或者嘗試了所有可能后確定沒有解。同時,本章會介紹圖的基本知識和優秀的圖算法。6.1 搜索搜索算法里的搜索和平時我們生活里搜索引擎中的搜索不盡相同。前者的意思則是“遍歷”,通俗地講……
第7章 廣度優先搜索算法
與第6章深度優先搜索算法相似,廣度優先搜索算法也是一個主要解決圖問題的搜索算法。通過第6章的學習,我們知道深度優先搜索算法可以應用于二叉樹問題,或最大面積的搜索,但一些經典的路徑問題,如求解圖中的最短路徑問題,則需要應用廣度優先搜索算法。廣度優先搜索算法與深度優先搜索算法類似,也是查詢的方法之一,……
第8章 回溯算法
回溯算法可以算作搜索/遍歷算法的一個分支。回溯算法和暴力的線性搜索法的相似點在于兩者在最壞的情況下都會嘗試所有的可能,導致時間復雜度為指數的搜索。但是,比起暴力搜索法,回溯算法是一種有條理的、最優化的搜索技術。回溯算法會通過提前放棄一些已知不可能的選擇,從而加快速度。回溯算法適用于解決信息量較大的約……
第9章 動態規劃
動態規劃是一種算法設計技術,通常用于求解最優化問題。它和分治方法很類似,都是通過劃分并求解子問題來獲得原問題的解。但與分治方法將子問題遞歸求解不同,動態規劃旨在剔除遞歸中的重疊子問題,對每個子問題只求解一次,從而可以極大地節省人力資源。本章將介紹有關動態規劃的問題。9.1 動態規劃介紹動態規劃在……
第10章 貪心算法
第9章我們講解了動態規劃。當一個問題具有最優子結構時,可以使用動態規劃求解。求解雖比一般的遞歸求解資源消耗小,但是我們通常還是要將每個子問題都求解出來。很多最優化問題還能不能簡化呢?答案當然是肯定的。本章我們將會學習另一種方法——貪心算法。10.1 貪心算法介紹第9章最后的最長遞增子序列問題中我……
第11章 分治算法
分治算法的主要思想是將原問題分成若干個子問題,解決這些子問題再最終合并出原問題的答案。在計算過程中,子問題會被遞歸地分解成更小的子問題,直到子問題滿足邊界條件。最后,算法會層層遞回原問題的答案。11.1 分治算法原理分治算法的原理可以用二叉樹表示。如圖11-1所示,假設給定的問題不能夠被直接解決……
第12章 并查集
并查集是解決圖的遍歷問題的一種優化數據結構,在元素的劃分和查找問題中,可以有效降低解決問題時的時間復雜度。12.1 并查集介紹并查集是一種表示不相交集合的數據結構。并查集由一組彼此之間元素各不相同的集合組成,常用于表示一組不相交元素構成的動態集合。在并查集結構中,每個集合都有一個代表元素,用于……
第13章 最短路徑算法
從手機導航到人工智能,最短路徑問題(Shortest Path Problems)在我們生活中無處不在。在之前我們介紹了關于圖的基本知識,包括權重、路徑、有向圖及無向圖。這一章我們學習4個解決最短路徑問題的算法。13.1 戴克斯特拉算法利用戴克斯特拉算法(Dijkstra’s Algorithm……
第14章 數論算法
很多數學算法,尤其是離散數學的算法,在計算機領域中擁有重要的位置。離散數學中包括數論與圖論,我們已經在第 13 章了解了一些基本的圖論算法,接下來我們學習幾個重要的數論算法。14.1 歐幾里得算法利用歐幾里得算法(Euclidean Algorithm,又稱輾轉相除法),我們可以得出任何兩個自然……
總結
以上是生活随笔為你收集整理的算法设计与分析python_Python算法设计与分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大学生英语fif测试系统_英语听力解题技
- 下一篇: python运算符讲解_python运算