《Python演算法教程》譯者序
在計算機的世界中,演算法本質上是我們對某一個問題或者某一類問題的解決方案。也就是說,如果我們想用計算機來解決問題的話,就必須將問題的解決思路準確而完整地描述出來,同時計算機也要能理解這個描述。這需要我們這些程式設計師將整個描述轉化成一系列清晰的指令,這些指令要能接收滿足一定規範的輸入,並在有限的時間內產生出相應的輸出。我們通常將這些指令稱為程式,而演算法則是程式的靈魂。
然而,程式光有靈魂是不夠的。例如,誠然搜尋演算法可以用來解決搜尋類問題,但我們通常是不會為搜尋而搜尋的。所有搜尋演算法在進入程式的時候,都要面對一些實質性的內容,比如新聞資訊、論文存檔,而這些內容往往都有具體的儲存系統,如資料庫、檔案系統等。這些系統本身也有各自的資料結構,如圖、樹、列表等,所以演算法並不是我們寫程式時唯一要考慮的問題。在很多現實情況下,它甚至還不是主要問題。
所以,如果用C或C++來進行程式設計教學的話,我們對於演算法設計的專注力很容易被資料結構這種更為基礎的細節干擾。畢竟用這些語言實現並使用好資料結構本身就已經很複雜了。因此,如果想專注於演算法教學,就需要一種不太需要程式設計師在資料結構上花太多時間的程式語言。
在相當長的一段時間裡,我們在進行演算法設計的時候通常用的是一種更接近於人類語言的“虛擬碼”。這種程式碼足夠抽象,能讓我們專注於演算法的表達,但遺憾的是,它們無法在計算機中執行,我們最終還是要將其翻譯成真正的程式語言。這很管用,但顯然不夠優雅。我們需要一種既能在抽象層面接近於這些“虛擬碼”,又能在計算機上像C那樣通用的語言。Python就是這樣一種語言。
這本書就是一本用Python來進行演算法設計教學的書,本書的作者在其上一本著作《Python基礎教程》中已經展現了其豐富的教學經驗和技術實力,我本人亦從中受益匪淺。能翻譯他的後續作品,我深感榮幸。但翻譯一本演算法書所需要付出的時間和精力還是遠遠超出了我的想象。而且,當我譯了近八個月,終於快將本書第1版譯完的時候,它的第2版又出版了。於是我不得不找了兩個朋友(見譯者簡介),他們的工作是重新針對第2版對譯稿進行校對、增改以及最後兩章的初譯。我很感謝他們給予我的幫助。除此之外,我還要感謝我的好朋友、《深入解析Windows作業系統》(第6版)的譯者範德成工程師,他全程參與了本書的校對,對譯稿進行了嚴格審閱,提供了很多寶貴建議。
祝願這本書能給讀者們帶來幫助,同時也希望你們閱讀快樂。
相關推薦
《Python演算法教程》譯者序
在計算機的世界中,演算法本質上是我們對某一個問題或者某一類問題的解決方案。也就是說,如果我們想用計算機來解決問題的話,就必須將問題的解決思路準確而完整地描述出來,同時計算機也要能理解這個描述。這需要我們這些程式設計師將整個描述轉化成一系列清晰的指令,這些指令要能接收滿足一定規範的輸入,並在有限的時間內產生出相
Python演算法教程 pdf下載
內容簡介 · · · · · · 本書用Python語言來講解演算法的分析和設計。本書主要關注經典的演算法,但同時會為讀者理解基本演算法問題和解決問題打下很好的基礎。全書共11章。分別介紹了樹、圖、計數問題、歸納遞迴、
Python 演算法教程 讀書筆記
以前看完不記筆記,看完了就慢慢忘記了,大腦的神經連線需要總結歸納和使用才能進一步建立成功,沒有體系的雜亂的知識是沒用的 第二章 基礎知識 2.2 漸進記法 漸進記法主要用於描述一個函式的增長姿態,忽略掉不相干的加法或者乘法常數,聚集於問題的主題,以便於根據顯著的特徵,在某個抽
python演算法與資料結構013--二叉樹的實現及按先序,後序,中序遍歷的遞迴實現
二叉樹的深度優先遍歷: (可以用遞迴或者堆疊實現) 先序:根節點->左子樹->右子樹 中序: 左子樹->根節點->右子樹 後序:左子樹->右子樹->根節點 二叉樹按廣度優先遍歷:從上到下,從左到右遍歷按層次遍歷(利用佇列實現) cl
《NLTK基礎教程》譯者序
說來也湊巧,在我簽下這本書的翻譯合同時,這個世界好像還不知道AlphaGo的存在。而在我完成這本書的翻譯之時,Master已經對人類頂級高手連勝60局了。至少從媒體的熱度來看,的確在近幾年,人工智慧似乎是越來越火了。其原因是Google在汽車駕駛和圍棋這兩個領域的專案得到了很好的進展和宣傳,而這兩個領域在過
開源一個 Python 中文資料結構和演算法教程
課程簡介資料結構和演算法是每個程式設計師需要掌握的基礎知識之一,也是面試中跨不過的檻。目前關於 Python 演算法和資料結構的中文資料比較欠缺,筆者嘗試錄製視訊教程幫助 Python 初學者掌握常用演算法和資料結構,提升開發技能。本教程是付費教程(文字內容和程式碼免費),因
Python簡明教程:基本概念
python1 字面意義上的常量,如2、‘This is ok‘這樣的字符串>>> print(‘a,2,3‘)a,2,32 字符串單引號(‘)使用單引號指示字符串,類似shell中的強引用,所有的空格、制表符照原樣保留。>>> print(‘This is ok‘)Thi
Python簡明教程:運算符與表達式
python Python大多數語句都包含表達式,如2+3,一個表達式可以分解為運算符和操作數。在上面的例子中,+為運算符,2和3為操作數。示例:>>> 2+35>>> 3+3*29本文出自 “一萬年太久,只爭朝夕” 博客,請務必保留此出處http://zengwj1
<<Python基礎教程>>學習筆記 | 第12章 | 圖形用戶界面
lena text 平臺 post ack 由於 contents exp 一個 Python支持的工具包非常多。但沒有一個被覺得標準的工具包。用戶選擇的自由度大些.本章主要介紹最成熟的跨平臺工具包wxPython.官方文檔: http://wxpython.org/
Python基礎教程之第5章 條件, 循環和其它語句
like eba cti python基礎 word 沒有 positive while循環 pytho Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
python 基礎教程 筆記 一
python第一章 python 基礎知識1.1 數字和數學表達式1.2 python 2.x 和python 3.x print的區別1.3 python 2.x 和 python 3.x input 的區別1.4 數學函數1.5 input 和 raw_input 區別第二章 列表和元組第三章 使用字符串
python基礎教程(五)
() 文件名 nal cnblogs 文件 求長 元素 fin 查詢 字符串基本操作 所有標準的序列操作(索引、分片、乘法、判斷成員資格、求長度、取最小值和最大值)對字符串同樣適用,前面已經講述的這些操作。但是,請註意字符串都是不可變的。 字符串的方法: 字符串從s
python基礎教程(一)
底層 技術分享 包括 什麽事 inpu 內容 很多 運算 下劃線 之所以選擇py交易有以下幾點:1、python是膠水語言(跨平臺),2、python無所不能(除了底層),3、python編寫方便(notepad++等文本編輯器就能搞事情),4、滲透方面很多腳本都是py
python基礎教程(四)
一次 不同 ble 排序。 itl tuple uda 基本 append 列表 本節繼續討論列表不同元組和字符串的地方:列表是可變的(mutable)----可以改變列表的內容,並且列表有很多有用的、專門的方法。 List函數可以將一個字符串拆分成列表。 >
python基礎教程(七)
如果 too import 初始 默認參數 hang zha lba 通過 本章介紹如何將語句組織成函數,這樣,可以告訴計算機如何做事。 下面編寫一小段代碼計算婓波那契數列(前兩個數的和是第三個數) fibs = [0,1] # 定義一個列表,初始內容是0,1
python基礎教程(三)
new gre multi mar tro ext blog 信息 無法 序列概覽 Python 包含6 種內建的序列,這裏重點討論最常用的兩種類型:列表和元組。 列表與元組的主要區別在於,列表可以修改,元組則不能。也就是說如果要根據要求來添加元素,那麽列表可以會更
python基礎教程(八)
處理 true spa 查看 對象 信息 世界 基礎教程 設計 創建自已的對象(類)是python非常核心的概念,事實上,python被稱為面向對象語言,本章會介紹如何創建對象。以及面向對象的概念:繼承、封裝、多態。 多態: 可對不同類的對象使用同樣的操作。 封裝:對
python基礎教程(十一)
list repeat stop row lis flatten ror 教程 [1] 叠代器 本節進行叠代器的討論。只討論一個特殊方法---- __iter__ ,這個方法是叠代器規則的基礎。 叠代器規則 叠代的意思是重復做一些事很多次---就像在循環中做的
python基礎教程(十)
.get 自定義 轉換 增加方法 log 技術分享 重寫 aaa 說明 魔法方法、屬性 ------------------------ 準備工作 為了確保類是新型類,應該把 _metaclass_=type 入到你的模塊的最開始。 class NewType(O
讀書筆記--《Python基礎教程第二版》-- 第五章 條件、循環和其他語句
ja5.1 print和import的更多信息5.1.1 使用獨號輸出>>> print ‘Age:‘,42Age: 42>>> 1,2,3(1, 2, 3)>>> print 1,2,31 2 3>>> print (1,2,3)(1,