開源一個 Python 算法和數據結構中文教程

連接

Python數據結構與算法教程 - 網易雲課堂html

網上閱讀《Python 算法與數據結構教程 》python

github 連接git

Python 數據結構與算法視頻教程程序員

課程簡介

數據結構和算法是每一個程序員須要掌握的基礎知識之一,也是面試中跨不過的檻。目前關於 Python 算法和數據結構的中文資料比較欠缺,
筆者嘗試錄製視頻教程幫助 Python 初學者掌握經常使用算法和數據結構,提高開發技能。
本教程是付費教程(文字內容和代碼免費),由於筆者錄製的過程當中除了購買軟件、手寫板等硬件以外,業餘須要花費不少時間和精力來錄製視頻、查資料、編寫課件和代碼,養家餬口不容易,但願你們體諒。github

痛點

  • 講 Python 數據結構和算法的資料不多,中文資料更少
  • 不少自學 Python 的工程師對基礎不夠重視,面試也發現不少數據結構和算法不過關,不少人掛在了基礎的數據結構和算法上
  • 缺乏工程應用場景下的講解,不少講算法的資料太『教科書化』。本書實現的代碼工程上可用
  • 網上不少教程純屬收智商稅,質量參差不齊

做者簡介

目前就任於知乎,從實習期間接觸 Python 起一直從事 Python 網站後端開發,有必定 Python 的使用和實踐經驗。web

知乎專欄:面試

電子書:《Python web 入坑指南》算法

課程內容

包括咱們在業務開發和麪試中經常使用的算法和數據結構,但願能夠幫助新人快速上手,不少老手寫業務代碼寫多了不少基礎知識忘記了,
也能夠做爲回顧。課程儘可能用通俗的方式講解,結合 python 語言和平常開發實踐的經驗,讓沒有太多基礎和非科班的同窗也可以理解。
對於每一個算法和用到的數據結構咱們須要知道:編程

  • 原理
  • Python 實現方式
  • 時間、空間複雜度
  • 使用場景,何時用

目錄結構

這裏講解的章節我參考了下邊教材中列舉的一些書籍,而且本身設計了大綱,爭取作到按部就班。由於實現一些高級數據結構的時候會用到
不少底層數據結構,防止跳躍太大致使讀者理解困難。vim

課程的目錄結構以下,每一章都有配套的文字講義(markdown),示例代碼,視頻講解,詳細的講解通常會放在視頻裏,使用手寫板來
進行板書,包括文字、圖示、手動模擬算法過程等。

  • 課程介紹
  • 課程簡介之笨方法學算法
  • 抽象數據類型 ADT,面向對象編程
  • 數組和列表
  • 鏈表,高級鏈表。雙鏈表,循環雙端鏈表
  • 隊列,雙端隊列,循環雙端隊列
  • 棧,棧溢出
  • 算法分析,時間複雜度 大O 表示法
  • 哈希表,散列衝突
  • 字典
  • 集合
  • 遞歸
  • 查找:線性查找和二分查找
  • 基本排序算法
  • 高級排序算法: 歸併排序、堆排序、快排
  • 樹,二叉樹
  • 圖,dfs 和 bfs
  • python 內置經常使用數據結構和算法的使用。list, dict, set, collections 模塊,heapq 模塊
  • 面試筆試常考算法
  • 後續閱讀

目前相關章節和視頻還在製做,將於近期完成。

編程語言

咱們這裏使用最近很火的Python。Python 入門簡單並且是個多面手,在爬蟲、web 後端、運維、數據分析、AI 、量化投資等領域都有 Python 的身影。
知乎、豆瓣、頭條、餓了麼、搜狐,國外的 Instagram/Reddit/Pinterest/Youtube 等網站都有普遍使用 Python。筆者平常工做使用也是 Python,有必定實踐經驗,
在知乎上維護了一個專欄《Python 學習之路》

Python 抽象程度比較高, 咱們能用更少的代碼來實現功能,同時不用像 C/C++ 那樣擔憂內存管理、指針操做等底層問題,
把主要心思放在算法邏輯自己而不是語言細節上,Python 也號稱僞代碼語言。全部代碼示例使用 Python2/3 兼容代碼,
不過只在 python3.5 下測試過,推薦用相同版本 Python。

受衆

想要學習 Python 算法和數據結構的初、中級同窗,包括自學的同窗和本科低年級學生等。須要掌握 Python
的基本語法和麪向對象編程的一些概念,咱們這裏只使用最基本的 Python 語法,不會再去介紹用到的 Python 語法糖。

預備知識

  • 掌握 Python 基本語法,有過使用 Python 的經驗。知道 class、module、yield 等
  • 基本的面向對象編程知識,會定義和使用 Python 中的類 (class)
  • 知道 Python 中的魔術方法,好比 __len____contains__
  • 無需太多數學基礎,僅在算法時間複雜度分析的時候會用到一些簡單數學知識。對於學習基礎算法,邏輯思惟可能更重要一些。不過涉及到數據的部分我會給出相關參考書對應章節方便你深刻學習

教材

這裏我參考過三本書:

《算法圖解》: 圖解的形式很適合新手,示例使用的是 python

《Data Structures and Algorithms in Python》: 適合對 Python
和算法比較熟悉的同窗,或者是有其餘語言編程經驗的同窗。英文版,缺點是書中錯誤真的不少,代碼有些沒法運行,甚至不夠 Pythonic

《算法導論》: 喜歡數學證實和板磚書的同窗能夠參考,有不少高級主題。使用僞代碼

講課形式

繪圖演示+手寫板+現場編碼

我將使用繪圖軟件+手寫板進行相似於紙筆形式的講解,邊講邊開個終端分紅兩個窗口,一個用 vim
編寫代碼,另外一個窗口用來運行代碼,全部代碼我將會現場編寫(仍是頗有挑戰的),不會像某些大學教師同樣只喜歡念 ppt。
每一個視頻我會盡可能控制時長,講的內容儘可能通俗易懂,擺脫學院派的授課方式。我相信理論+實踐+手動模擬是一種比較好的學習方式。

你能夠參考我在知乎發的專欄文章看下:

那些年,咱們一塊兒跪過的算法題[視頻]

抱歉,我是開發,你竟然讓我寫單測[視頻]

課程特色

  • 每一個算法和數據結構都有講義、視頻(包含講解、圖示、手動模擬)、源代碼。其中只有視頻內容爲付費內容
  • 講義按部就班,結合本身的學習和使用經驗講解。github 上實時更新
  • 視頻演示更加直觀易懂
  • 演示代碼實現思路,全部代碼在視頻裏均現場編寫
  • 偏向工程應用和代碼實現。代碼直接能夠用。每一個文件都是自包含的,你能夠直接運行和調試,這是目前大部分書籍作得不到位的地方
  • 良好的工程實踐:編碼以前碎碎念(工程實踐)
    這是不少看了幾本書沒有太多業界實踐經驗就敢講課的培訓班老師教不了的。知識廉價,經驗無價
  • 每一個實現都會有單測來驗證,培養良好的編碼和測試習慣,傳授工程經驗
  • 結合 cpython 底層實現講解(好比list 內存分配策略等),避免一些使用上的坑。而且會用 python 來模擬內置 dict 等的實現
  • 每篇講義後有思考題和延伸閱讀連接,幫助你們加深思考和理解

資料

  • 視頻。包含全部講解視頻
  • 代碼示例。全部代碼我會放到 github 上
  • markdown 講義,包含視頻內容的提要等內容
  • 延伸閱讀。我會附上一些閱讀資料方便想深刻學習的同窗

如何獲取每章代碼

注意每一章目錄裏都有 py 文件,在電子書裏看不到。clone 下代碼找到對應目錄裏的 python 文件便是每章涉及到的代碼。沒有任何版權限制,你能夠隨意修改、練習、調試和使用。我從開源社區學到了不少,但願能作點小小的貢獻吸引更多優秀的人加入 Python 社區吧。

如何學習

筆者講課錄製視頻的過程也是本身再整理和學習的過程,錄製視頻以前須要參考不少資料
但願對所講到的內容,你可以

  • 理解所講的每一個數據結構和算法的
    • 原理
    • Python 實現方式
    • 時間、空間複雜度
    • 使用場景,何時用


  • 本身嘗試實現,若是拋開視頻本身寫起來有困難能夠多看幾回視頻,必定要本身手動實現。不少面試可能會讓手寫
  • 每章講義後邊都會有我設計的幾個小問題,最好可以回答上來。同時還有代碼練習題,你能夠挑戰下本身的掌握程度。
  • 最好按照順序按部就班,每章都會有鋪墊和聯繫

課程目標

掌握基本的算法和數據結構原理,能獨立使用 Python 語言實現,能在平常開發中靈活選用數據結構。
對於找工做的同窗提高面試成功率。

工具

推薦使用如下工具進行開發,若是使用編輯器最好裝對 應 Python 插件,不推薦新手摺騰編輯器,除非你有這個愛好😂:

  • Pycharm(首推)
  • Sublime
  • Atom
  • Vscode
  • Vim/Emacs

勘誤

輸出其實也是一種再學習的過程,中途須要查看大量資料、編寫講義、視頻錄製、代碼編寫等,不免有疏漏之處。
有出版社找過筆者想讓我出書,一來本身對出書興趣不大,另外感受書籍相對視頻不夠直觀,有錯誤也不能及時修改,打算直接把全部
文字內容講義放到 github 上,供你們免費查閱。

若是你以爲文字內容或者視頻內容有錯誤,歡迎在 github 上提 issue 討論,我會修正相關內容,防止產生誤導。

本電子書製做和寫做方式

使用 mkdocs 和 markdown 構建,使用 Python-Markdown-Math 完成數學公式

安裝依賴:

pip install mkdocs    # 製做電子書
# https://stackoverflow.com/questions/27882261/mkdocs-and-mathjax/31874157
pip install https://github.com/mitya57/python-markdown-math/archive/master.zip
複製代碼

編寫並查看:

mkdocs serve     # 修改自動更新,http://localhost:8000 訪問
# 數學公式參考 https://www.zybuluo.com/codeep/note/163962
複製代碼

若是你 fork 了本項目,能夠按期 pull 下主倉庫代碼,獲取最新的章節。

相關文章
相關標籤/搜索