Skip to content

Commit 22ceb7a

Browse files
committed
Change them into correct charachters.
1 parent 29609ad commit 22ceb7a

File tree

48 files changed

+735
-735
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+735
-735
lines changed

README.md

Lines changed: 57 additions & 57 deletions
Large diffs are not rendered by default.
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
# 什麼是算法和數據結構?
22

3-
你可能會在一些教材上看到這句话
3+
你可能會在一些教材上看到這句話
44

55
程序 = 算法 + 數據結構
66

7-
算法(Algorithm):是指解题方案的准确而完整的描述,是一系列解决問題的清晰指令,算法代表着用系统的方法描述解决問題的策略機制。也就是說,能够對一定規範的输入,在有限時間内获得所要求的输出
7+
算法(Algorithm):是指解题方案的准確而完整的描述,是一系列解決問題的清晰指令,算法代表着用系统的方法描述解決問題的策略機制。也就是說,能够對一定規範的輸入,在有限時間内获得所要求的輸出
88

9-
數據結構(Data Structures):是计算機存儲和組織數據的一種方式,可以用來高效地處理數據。
9+
數據結構(Data Structures):是計算機存儲和組織數據的一種方式,可以用來高效地處理數據。
1010

11-
舉個例子:二分查找就是一個非常經典的算法,而二分查找經常需要作用在一個有序数組上。這裡二分就是一種折半的算法思想,
12-
而数組是我們最常用的一種數據結構,支持根據下標快速訪問。很多算法需要特定的數據結構來實現,所以經常把它們放到一塊講。
11+
舉個例子:二分查找就是一個非常經典的算法,而二分查找經常需要作用在一個有序數組上。這裡二分就是一種折半的算法思想,
12+
而數組是我們最常用的一種數據結構,支持根據下標快速訪問。很多算法需要特定的數據結構來實現,所以經常把它們放到一塊講。
1313

1414
實際上,在真正的項目開發中,大部分時間都是 從資料庫取數據 -> 數據操作和結構化 -> 返回给前端,在數據操作過程中需要合理地抽象,
15-
組織、處理數據,如果選用了错誤的數據結構,就會造成代碼運行低效。這也是我們需要學習算法和數據結構的原因。
15+
組織、處理數據,如果選用了错誤的數據結構,就會造成原始碼運行低效。這也是我們需要學習算法和數據結構的原因。
1616

1717
# 笨方法學算法
1818
這裡我們用一種很原始的『笨』方法來學習算法:紙筆模擬。
@@ -25,6 +25,6 @@
2525
# 小問題 :smile:
2626

2727
- 你還知道哪些經典的算法和數據結構?
28-
- 學習算法你覺得需要哪些预备知识
29-
- 我們的業務代碼開發中會涉及到算法嗎
30-
- 你了解 redis 嗎,你知道它有哪几個常用的數據結構嗎?你知道它的底层實現方式嗎?
28+
- 學習算法你覺得需要哪些預备知识
29+
- 我們的業務原始碼開發中會涉及到算法嗎
30+
- 你了解 redis 嗎,你知道它有哪幾個常用的數據結構嗎?你知道它的底层實現方式嗎?

docs/01_抽象数据类型和面向对象编程/ADT_OOP.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,49 +4,49 @@
44

55
```py
66
l = list() # 實例化一個 list 對象 l
7-
l.append(1) # 调用 l 的 append 方法
7+
l.append(1) # 調用 l 的 append 方法
88
l.append(2)
99
l.remove(1)
10-
print(len(l)) # 调用對象的 `__len__` 方法
10+
print(len(l)) # 調用對象的 `__len__` 方法
1111
```
1212

13-
在後面實現新的數據类型时,我們将使用 python 的 class 實現,它包含属性和方法
14-
属性一般是使用某種特定的數據类型,而方法一般是對属性的操作
15-
這裡你只需了解這麼多就行了, 我們不會使用继承等特性
13+
在後面實現新的數據類型時,我們將使用 python 的 class 實現,它包含屬性和方法
14+
屬性一般是使用某種特定的數據類型,而方法一般是對屬性的操作
15+
這裡你只需了解這麼多就行了, 我們不會使用繼承等特性
1616

1717

18-
# 什麼是抽象數據类型 ADT
18+
# 什麼是抽象數據類型 ADT
1919

20-
實際上 python 内置的 list 就可以看成一種抽象數據类型
20+
實際上 python 内置的 list 就可以看成一種抽象數據類型
2121

22-
ADT: Abstract Data Type,抽象數據类型,我們在組合已有的數據結構來實現一種新的數據类型, ADT 定義了类型的數據和操作
22+
ADT: Abstract Data Type,抽象數據類型,我們在組合已有的數據結構來實現一種新的數據類型, ADT 定義了類型的數據和操作
2323

24-
我們以抽象一個背包(Bag) 數據类型來說明,背包是一種容器类型,我們可以给它添加東西,也可以移除東西,并且我們想知道背包里
25-
有多少東西。于是我們可以定義一個新的數據类型叫做 Bag.
24+
我們以抽象一個背包(Bag) 數據類型來說明,背包是一種容器類型,我們可以给它添加東西,也可以移除東西,並且我們想知道背包裡
25+
有多少東西。於是我們可以定義一個新的數據類型叫做 Bag.
2626

2727
```py
2828
class Bag:
29-
""" 背包类型 """
29+
""" 背包類型 """
3030
pass
3131
```
3232

3333

3434
# 實現一個 Bag ADT
35-
影片中我們将使用 python 的 class 來實現一個新的容器类型叫做 Bag。
35+
影片中我們將使用 python 的 class 來實現一個新的容器類型叫做 Bag。
3636

3737

38-
# 實現 ADT 我們应该注意什麼
38+
# 實現 ADT 我們應該注意什麼
3939
- 如何選用恰當的數據結構作為存儲?
4040
- 選取的數據結構能否满足 ADT 的功能需求
4141
- 實現效率如何?
4242

4343

4444
# 小問題:
45-
- 你了解 python 的魔術方法嗎? 比如 `__len__`调用 len(l) 的时候發生了什麼
46-
- 你了解單測嗎?我們以後将使用 pytest 運行單元測试,保证我們實現的數據結構和算法是正确的。你可以网上搜索下它的簡單用法
45+
- 你了解 python 的魔術方法嗎? 比如 `__len__`調用 len(l) 的時候發生了什麼
46+
- 你了解單測嗎?我們以後將使用 pytest 運行單元測試,保證我們實現的數據結構和算法是正確的。你可以網上搜索下它的簡單用法
4747

4848
# 延伸閱讀:
4949

50-
[數據結構与算法--ADT](http://www.atjiang.com/data-structures-using-python-ADT/)
50+
[數據結構與算法--ADT](http://www.atjiang.com/data-structures-using-python-ADT/)
5151

5252
[http://www.nhu.edu.tw/~chun/CS-ch12-Abstract%20Data%20Types.pdf](http://www.nhu.edu.tw/~chun/CS-ch12-Abstract%20Data%20Types.pdf)
Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
# 線性結構
2-
本節我們從最簡單和常用的線性結構開始,并結合 Python 语言本身内置的數據結構和其底层實現方式來講解。
3-
雖然本质上數據結構的思想是语言无關的,但是了解 Python 的實現方式有助于你避免一些坑
2+
本節我們從最簡單和常用的線性結構開始,並結合 Python 语言本身内置的數據結構和其底层實現方式來講解。
3+
雖然本质上數據結構的思想是语言無關的,但是了解 Python 的實現方式有助於你避免一些坑
44

5-
我們會在代碼中注释出操作的時間複雜度
5+
我們會在原始碼中注释出操作的時間複雜度
66

77

8-
# 数組 array
8+
# 數組 array
99

10-
数組是最常用到的一種線性結構,其實 python 内置了一個 array 模塊,但是大部人甚至從來没用過它。
11-
Python 的 array 是内存连续、存儲的都是同一數據类型的結構,而且只能存数值和字符
10+
數組是最常用到的一種線性結構,其實 python 内置了一個 array 模塊,但是大部人甚至從來没用過它。
11+
Python 的 array 是記憶體連續、存儲的都是同一數據類型的結構,而且只能存數值和字符
1212

13-
我建議你课下看下 array 的文档:https://docs.python.org/2/library/array.html
13+
我建議你課下看下 array 的文档:https://docs.python.org/2/library/array.html
1414

15-
你可能很少會使用到它(我推荐你用 numpy.array),我将在影片里簡單介绍下它的使用和工作方式,最常用的還是接下來要說的 list,
16-
本章最後我們會用 list 來實現一個固定长度、并且支持所有 Python 數據类型的数組 Array.
15+
你可能很少會使用到它(我推荐你用 numpy.array),我將在影片裡簡單介绍下它的使用和工作方式,最常用的還是接下來要說的 list,
16+
本章最後我們會用 list 來實現一個固定長度、並且支持所有 Python 數據類型的數組 Array.
1717

1818

1919
# 列表 list
20-
如果你學過 C++,list 其實和 C++ STL(標准模板库)中的 vector 很类似,它可能是你的 Python 學習中使用最频繁的數據結構之一
21-
這裡我們不再去自己實現 list,因為這是個 Python 提供的非常基础的數據类型,我會在影片中講解它的工作方式和内存分配策略
20+
如果你學過 C++,list 其實和 C++ STL(標准模板库)中的 vector 很類似,它可能是你的 Python 學習中使用最頻繁的數據結構之一
21+
這裡我們不再去自己實現 list,因為這是個 Python 提供的非常基础的數據類型,我會在影片中講解它的工作方式和記憶體分配策略
2222
避免使用過程中碰到一些坑。當然如果你有毅力或者興趣的了解底层是如何實現的,可以看看 cpython 解释器的具體實現。
2323

2424

@@ -33,14 +33,14 @@ list.remove | O(n) |
3333
![](./list.png)
3434

3535
# 用 list 實現 Array ADT
36-
講完了 list 让我們來實現一個定长的数組 Array ADT,在其他一些语言中,内置的数組結構就是定长的
37-
這裡我們會使用 list 作為 Array 的一個成员(代理)。具體請参考影片講解和代碼示例,後面我們會使用到這個 Array
36+
講完了 list 讓我們來實現一個定長的數組 Array ADT,在其他一些语言中,内置的數組結構就是定長的
37+
這裡我們會使用 list 作為 Array 的一個成员(代理)。具體請参考影片講解和原始碼示例,後面我們會使用到這個 Array
3838

3939

4040
# 小問題
41-
- 你知道線性結構的查找,删除,訪問一個元素的平均時間複雜度嗎?(後面我們會介绍這個概念,现在你可以簡單地理解為一個操作需要的平均步骤)
42-
- list 内存重新分配的时候為什麼要有冗余?不會浪费空間嗎?
43-
- 當你频繁的pop list 的第一個元素的时候,會發生什麼?如果需要频繁在兩头增添元素,你知道更高效的數據結構嗎?後面我們會講到
41+
- 你知道線性結構的查找,删除,訪問一個元素的平均時間複雜度嗎?(後面我們會介绍這個概念,現在你可以簡單地理解為一個操作需要的平均步骤)
42+
- list 記憶體重新分配的時候為什麼要有冗餘?不會浪费空間嗎?
43+
- 當你頻繁的pop list 的第一個元素的時候,會發生什麼?如果需要頻繁在兩頭增添元素,你知道更高效的數據結構嗎?後面我們會講到
4444

4545

4646
# 延伸閱讀
@@ -51,4 +51,4 @@ list.remove | O(n) |
5151

5252

5353
# 勘誤
54-
影片里的 Array.clear 方法有誤。应该是 `for i in range(len(self._items))`,已經在後续所有使用到 Array 的代碼里修正
54+
影片裡的 Array.clear 方法有誤。應該是 `for i in range(len(self._items))`,已經在後续所有使用到 Array 的原始碼裡修正

docs/02_数组和列表/array_and_list.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
# -*- coding: utf-8 -*-
22

33
# https://docs.python.org/2/library/array.html
4-
from array import array # python 提供的比较原始的 array
4+
from array import array # python 提供的比较原始的 array
55

66

77
arr = array('u', 'asdf')
88

99
print(arr[0], arr[1], arr[2], arr[3])
1010

1111

12-
# 實現定长的 Array ADT,省略了邊界检查等
12+
# 實現定長的 Array ADT,省略了邊界檢查等
1313

1414
class Array(object):
1515

docs/03_链表/double_link_list.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def headnode(self):
2929
def tailnode(self):
3030
return self.root.prev
3131

32-
def append(self, value): # O(1), 你發现一般不用 for 循環的就是 O(1),有限個步骤
32+
def append(self, value): # O(1), 你發現一般不用 for 循環的就是 O(1),有限個步骤
3333
if self.maxsize is not None and len(self) >= self.maxsize:
3434
raise Exception('LinkedList is Full')
3535
node = Node(value=value)
@@ -60,7 +60,7 @@ def appendleft(self, value):
6060

6161
def remove(self, node): # O(1),傳入node 而不是 value 我們就能實現 O(1) 删除
6262
"""remove
63-
:param node # 在 lru_cache 里實際上根據key 保存了整個node:
63+
:param node # 在 lru_cache 裡實際上根據key 保存了整個node:
6464
"""
6565
if node is self.root:
6666
return

0 commit comments

Comments
 (0)