2
2
3
3
## 课程简介
4
4
數據結構和算法是每個程序员需要掌握的基础知识之一,也是面试中跨不過的槛。目前關于 Python 算法和數據結構的系统中文资料比较欠缺,
5
- 笔者嘗試录制影片教程帮助 Python 開发者掌握常用算法和數據結構,提升開发技能 。
5
+ 笔者嘗試录制影片教程帮助 Python 開發者掌握常用算法和數據結構,提升開發技能 。
6
6
本教程是付费教程(文字内容和代碼免费),因為笔者录制的過程中除了购买软件、手写板等硬件之外,业余需要花费很多時間和精力來录制影片、查资料、编写课件和代碼,养家糊口不容易,希望大家體谅。
7
7
8
8
## 鏈接
9
- 影片教程已經发布在网易云课堂和 csdn 学院,内容一致,推荐使用网易云课堂。
9
+ 影片教程已經發布在网易云课堂和 csdn 学院,内容一致,推荐使用网易云课堂。
10
10
11
11
[ 网易云课堂: Python數據結構与算法教程] ( http://study.163.com/course/introduction.htm?courseId=1005526003 ) 影片教程
12
12
22
22
23
23
## 痛點
24
24
- 講 Python 數據結構和算法的资料很少,中文资料更少
25
- - 很多自学 Python 的工程师對基础不够重视,面试也发现很多數據結構和算法不過關 ,很多人挂在了基础的數據結構和算法上
25
+ - 很多自学 Python 的工程师對基础不够重视,面试也發现很多數據結構和算法不過關 ,很多人挂在了基础的數據結構和算法上
26
26
- 缺少工程应用场景下的講解,很多講算法的资料太『教科书化』。本书實現的代碼工程上可用
27
27
- 网上很多影片教程不够循序渐进,不成系统
28
28
29
29
## 作者简介
30
- 曾就职于[ 知乎] ( https://www.zhihu.com/people/pegasus-wang/activities ) ,任後端工程师,多年 Python 開发經验 。
30
+ 曾就职于[ 知乎] ( https://www.zhihu.com/people/pegasus-wang/activities ) ,任後端工程师,多年 Python 開發經验 。
31
31
32
32
知乎专栏:
33
33
37
37
电子书:[ 《Python web 入坑指南》] ( http://python-web-guide.readthedocs.io/zh/latest/ )
38
38
39
39
## 课程内容
40
- 包括我們在业务開发和面试中常用的算法和數據結構 ,希望可以帮助 Python 開发者快速上手 ,很多老手写业务代碼写多了很多基础知识忘记了,
41
- 也可以作為回顾。课程尽量用通俗的方式講解,結合 python 语言和日常開发实践的經验 。书中代碼可以作為大家的面试笔试参考。
40
+ 包括我們在业务開發和面试中常用的算法和數據結構 ,希望可以帮助 Python 開發者快速上手 ,很多老手写业务代碼写多了很多基础知识忘记了,
41
+ 也可以作為回顾。课程尽量用通俗的方式講解,結合 python 语言和日常開發實践的經验 。书中代碼可以作為大家的面试笔试参考。
42
42
對于每個算法和用到的數據結構我們需要知道:
43
43
44
44
- 原理
47
47
- 使用场景,什么时候用
48
48
49
49
## 目录結構
50
- 這裡講解的章節我参考了下邊教材中列举的一些书籍,并且自己设计了大纲,争取做到循序渐进,簡單实用 。因為實現一些高级數據結構的时候會用到
50
+ 這裡講解的章節我参考了下邊教材中列举的一些书籍,并且自己设计了大纲,争取做到循序渐进,簡單實用 。因為實現一些高级數據結構的时候會用到
51
51
很多底层數據結構,防止跳跃太大导致讀者理解困难。
52
52
53
53
课程的目录結構如下,每一章都有配套的文字講義(markdown),示例代碼,影片講解,详细的講解一般會放在影片里,使用手写板來
79
79
## 编程语言
80
80
我們這裡使用最近很火的Python。Python 入门簡單而且是個多面手,在爬虫、web 後端、运维、數據分析、AI、量化投资等领域都有 Python 的身影,
81
81
无论是否是专业程序员, Python 都是一门学习性價比非常高的语言。
82
- 知乎、豆瓣、头條、饿了么、搜狐等公司都有广泛使用 Python。笔者日常工作使用也是 Python,有一定实践經验 ,
82
+ 知乎、豆瓣、头條、饿了么、搜狐等公司都有广泛使用 Python。笔者日常工作使用也是 Python,有一定實践經验 ,
83
83
在知乎上维护了一個专栏[ 《Python 学习之路》] ( https://zhuanlan.zhihu.com/c_85234576 ) 。
84
84
85
85
Python 抽象程度比较高, 我們能用更少的代碼來實現功能,同时不用像 C/C++ 那样担心内存管理、指針操作等底层問題,
@@ -89,12 +89,12 @@ Python 抽象程度比较高, 我們能用更少的代碼來實現功能,同
89
89
## 受众
90
90
想要学习 Python 算法和數據結構的中级同学,包括自学的同学和本科低年级学生等。需要掌握 Python
91
91
的基本语法和面向對象编程的一些概念,有一定的 Python 使用經验。我們這裡尽量只使用最基本的 Python 语法,不會再去介绍用到的 Python 语法糖。
92
- 數據結構和算法算是本科教育中偏难的课程,既需要你理解其原理,又需要具有有扎实的编程能力 。
92
+ 數據結構和算法算是本科教育中偏难的课程,既需要你理解其原理,又需要具有有扎實的编程能力 。
93
93
94
94
** 請注意: 本教程不是零基础教程,着重于使用 Python 實現常用算法和數據結構,不适合从來没有学過算法和數據結構的新手同学,购买之前請慎重考虑,請确保你之前看過一本數據結構和算法的教材,最好有過其他语言實現算法的經验**
95
95
96
96
# 预备知识
97
- (注意:有些同学看起來很吃力,為了不花冤枉钱,我建議你先整體浏览本电子书的内容和代碼是否在自己的理解范围内,再决定是否购买影片。有些概念不是立马就能理解的,需要反复思考实践 )
97
+ (注意:有些同学看起來很吃力,為了不花冤枉钱,我建議你先整體浏览本电子书的内容和代碼是否在自己的理解范围内,再决定是否购买影片。有些概念不是立马就能理解的,需要反复思考實践 )
98
98
99
99
- 了解基本的數據結構和算法的概念,不适合** 完全** 没有了解過算法的新手,更不适合 Python 基础都没掌握的同学。购买之前請慎重考虑
100
100
- 无需太多数学基础,仅在算法時間複雜度分析的时候會用到一些簡單数学知识。對于学习基础算法,逻辑思维可能更重要一些
@@ -126,23 +126,23 @@ https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
126
126
编写代碼,另一個窗口用來运行代碼,所有代碼我将會现场编写(還是很有挑战的)。
127
127
每個影片我會尽量控制时长,講的内容尽量通俗易懂,摆脱学院派的授课方式。
128
128
129
- 你可以参考我在知乎发的专栏文章看下 :
129
+ 你可以参考我在知乎發的专栏文章看下 :
130
130
131
131
[ 那些年,我們一起跪過的算法题[ 影片]] ( https://zhuanlan.zhihu.com/p/35175401 )
132
132
133
- [ 抱歉,我是開发 ,你居然让我写單測[ 影片]] ( https://zhuanlan.zhihu.com/p/35352024 )
133
+ [ 抱歉,我是開發 ,你居然让我写單測[ 影片]] ( https://zhuanlan.zhihu.com/p/35352024 )
134
134
135
135
136
136
## 课程特點
137
137
138
138
- 每個算法和數據結構都有講義、影片(包含講解、图示、手動模擬)、源代碼。其中只有影片内容為付费内容
139
- - 講義循序渐进,結合自己的学习和使用經验講解。github 上实时更新
139
+ - 講義循序渐进,結合自己的学习和使用經验講解。github 上實时更新
140
140
- 影片演示更加直觀易懂
141
141
- 演示代碼實現思路,所有代碼在影片里均现场编写
142
142
- 偏向工程应用和代碼實現。代碼直接可以用。每個文件都是自包含的,你可以直接运行和调试,這是目前大部分书籍做得不到位的地方
143
- - 良好的工程实践 :[ 编碼之前碎碎念(工程实践 )] ( http://python-web-guide.readthedocs.io/zh/latest/codingstyle/codingstyle.html ) 。
144
- 這是很多看了几本书没有太多业界实践經验就敢講课的培训班老师教不了的 。** 知识廉價,經验无價**
145
- - 每個實現都會有單測來验证,培养良好的编碼和測试习惯,传授工程經验
143
+ - 良好的工程實践 :[ 编碼之前碎碎念(工程實践 )] ( http://python-web-guide.readthedocs.io/zh/latest/codingstyle/codingstyle.html ) 。
144
+ 這是很多看了几本书没有太多业界實践經验就敢講课的培训班老师教不了的 。** 知识廉價,經验无價**
145
+ - 每個實現都會有單測來验证,培养良好的编碼和測试习惯,傳授工程經验
146
146
- 結合 cpython 底层實現講解(比如list 内存分配策略等),避免一些使用上的坑。并且會用 python 來模擬内置 dict 等的實現
147
147
- 每篇講義後有思考题和延伸閱讀鏈接,帮助大家加深思考和理解。大部分题目答案都可以网络上搜索到
148
148
@@ -168,19 +168,19 @@ https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
168
168
- Python 實現方式
169
169
- 時間、空間複雜度
170
170
- 使用场景,什么时候用
171
- - 自己嘗試實現,如果抛開影片自己写起來有困难可以反复多看几次影片,一定要自己手動實現。很多面试可能會让手写。一次不行就看完原理後多实践几次 ,直到能自己独立完成。
171
+ - 自己嘗試實現,如果抛開影片自己写起來有困难可以反复多看几次影片,一定要自己手動實現。很多面试可能會让手写。一次不行就看完原理後多實践几次 ,直到能自己独立完成。
172
172
- 每章講義後面都會有我设计的几個小問題,最好能够回答上來。同时還有代碼练习题,你可以挑战下自己的掌握程度。
173
173
- 最好按照顺序循序渐进,每章都會有铺垫和联系,後面的章節可能會使用到前面提到的數據結構
174
174
- 根據自己的基础結合我列举的教材和影片学习,第一次理解不了的可以反复多看几次,多编写代碼练习到熟练為止
175
175
176
176
## 课程目标
177
- 掌握基本的算法和數據結構原理,能独立使用 Python 语言實現,能在日常開发中灵活选用數據結構 。
177
+ 掌握基本的算法和數據結構原理,能独立使用 Python 语言實現,能在日常開發中灵活选用數據結構 。
178
178
對于找工作的同学提升面试成功率。
179
179
180
180
181
- ## 開发和測试工具
181
+ ## 開發和測试工具
182
182
183
- 推荐使用以下工具进行開发 ,如果使用编辑器最好装對 应 Python 插件,笔者影片演示中使用了 vim,讀者可以自己挑选自己喜欢的開发工具 :
183
+ 推荐使用以下工具进行開發 ,如果使用编辑器最好装對 应 Python 插件,笔者影片演示中使用了 vim,讀者可以自己挑选自己喜欢的開發工具 :
184
184
185
185
- Pycharm
186
186
- Sublime
@@ -208,7 +208,7 @@ pip install when-changed
208
208
```
209
209
'./test.sh somefile.py'
210
210
```
211
- 每次我們改動了代碼,就會自動执行代碼里的單元測试了。pytest 會自動发现以 test
211
+ 每次我們改動了代碼,就會自動执行代碼里的單元測试了。pytest 會自動發现以 test
212
212
開头的函数并执行測试代碼。良好的工程需要我們用單測來保证,将來即使修改了内部實現逻辑也方便做回归验证。
213
213
214
214
或者你可以在的 ~ /.bashrc or ~ /.zshrc 里邊加上這個映射(别忘记加上之後source下):
@@ -223,7 +223,7 @@ alias watchtest='when-changed -v -r -1 -s ./ '
223
223
224
224
## 測试用例设计
225
225
226
- 笔者在刚学习编程的时候总是忘记处理一些特例(尤其是動态语言可以传各種值 ),為了养成良好的编程和測试习惯,在编写單元測试用例的时候,
226
+ 笔者在刚学习编程的时候总是忘记处理一些特例(尤其是動态语言可以傳各種值 ),為了养成良好的编程和測试习惯,在编写單元測试用例的时候,
227
227
我們注意考虑下如下測试用例(等價类划分):
228
228
229
229
- 正常值功能測试
@@ -267,18 +267,18 @@ def test():
267
267
```
268
268
269
269
當然我們也不用做的非常细致,要不然写測试是一件非常繁琐累人的事情,甚至有时候為了測试而測试,只是為了让單測覆盖率好看點。
270
- 當然如果是web应用用户输入,我們要假设所有的参数都是不可信的。 但是很多内部调用的函数我們基于约定來编程,如果你瞎传参数 ,那就是调用者的责任了。
270
+ 當然如果是web应用用户输入,我們要假设所有的参数都是不可信的。 但是很多内部调用的函数我們基于约定來编程,如果你瞎傳参数 ,那就是调用者的责任了。
271
271
272
272
273
273
## 勘誤
274
274
275
- 输出其实也是一種再学习的過程 ,中途需要查看大量资料、编写講義、影片录制、代碼编写等,难免有疏漏甚至错誤之处。
275
+ 输出其實也是一種再学习的過程 ,中途需要查看大量资料、编写講義、影片录制、代碼编写等,难免有疏漏甚至错誤之处。
276
276
有出版社找過笔者想让我出书,一來自己對出书興趣不大,另外感覺书籍相對影片不够直觀,有错誤也不能及时修改,打算直接把所有文字内容講義和代碼等放到 github 上,供大家免费查阅。
277
277
278
- 如果你发现文字内容 、代碼内容、影片内容有错誤或者有疑问,欢迎在 github 上提 issue 讨论(或者网易公開课评论區),或者直接提 Merge Request,我會尽量及时修正相關内容,防止對讀者产生誤导。
279
- 同时非常感谢认真学习并及时发现书中错誤的同学 ,非常欢迎針對知识本身的交流和讨论,任何建議和修正我都會认真求证。
278
+ 如果你發现文字内容 、代碼内容、影片内容有错誤或者有疑问,欢迎在 github 上提 issue 讨论(或者网易公開课评论區),或者直接提 Merge Request,我會尽量及时修正相關内容,防止對讀者产生誤导。
279
+ 同时非常感谢认真学习并及时發现书中错誤的同学 ,非常欢迎針對知识本身的交流和讨论,任何建議和修正我都會认真求证。
280
280
對于提出修正意見或者提交代碼的同学,由于人数比较多這裡就不一一列举了,可以在以下列表查看,再次感谢你们。笔者信奉開源精神,『眼睛足够多,bug 无处藏』。
281
- 如果您发现影片中的代碼有誤 ,請及时使用 git pull 拉取本项目的代碼更新,最好用目前最新的代碼來学习和实践 。
281
+ 如果您發现影片中的代碼有誤 ,請及时使用 git pull 拉取本项目的代碼更新,最好用目前最新的代碼來学习和實践 。
282
282
283
283
[ issue] ( https://github.com/PegasusWang/python_data_structures_and_algorithms/issues?q=is%3Aissue+is%3Aclosed )
284
284
0 commit comments