Skip to content

Commit 77ffcab

Browse files
committed
update docs
1 parent d5e4753 commit 77ffcab

File tree

15 files changed

+49
-40
lines changed

15 files changed

+49
-40
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
# Algorithm
1+
# Algorithm Ttutorial
22

3-
> Java 实现算法
3+
> :keyboard: 项目同步维护在 [github](https://github.com/dunwu/algorithm-tutorial) | [gitee](https://gitee.com/turnon/algorithm-tutorial)
4+
>
5+
> :book: [电子书](https://dunwu.github.io/algorithm-tutorial/) | [电子书(国内)](http://turnon.gitee.io/algorithm-tutorial/)
46
57
## 笔记
68

docs/README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
# 算法和数据结构
1+
# Algorithm Ttutorial
22

3-
> :dart: 所有配套源码整理归档在 [**algorithm-tutorial**](https://github.com/dunwu/algorithm-tutorial) 项目中。
3+
> :keyboard: 项目同步维护在 [github](https://github.com/dunwu/algorithm-tutorial) | [gitee](https://gitee.com/turnon/algorithm-tutorial)
4+
>
5+
> :book: [电子书](https://dunwu.github.io/algorithm-tutorial/) | [电子书(国内)](http://turnon.gitee.io/algorithm-tutorial/)
46
57
## 📝 知识点
68

docs/algorithm/search/hash-search.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
构造哈希表这个场景就像汽车找停车位,如果车位被人占了,只能找空的地方停。
2222

23-
<div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-4f4e0c3def86f7bb.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 "点击查看源网页""/></div>
23+
<div align="center"><img src="http://upload-images.jianshu.io/upload_images/3101171-4f4e0c3def86f7bb.jpg "点击查看源网页""/></div>
2424

2525
## 构造哈希表
2626

@@ -81,7 +81,7 @@
8181

8282
不妨设选取的p和m为13,由 f(key) = key % 13 可以得到下表。
8383

84-
<div align="center"><img src="https://upload-images.jianshu.io/upload_images/3101171-06a789e7f9b31da6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"/></div>
84+
<div align="center"><img src="https://upload-images.jianshu.io/upload_images/3101171-06a789e7f9b31da6.png"/></div>
8585

8686
需要注意的是,在上图中有两个关键字的探查次数为 2 ,其他都是1。
8787

@@ -105,7 +105,7 @@ b. 35 % 13 结果是 9,而它的前面有个 9,9 % 13也是 9,存在冲突
105105

106106
如果对开放定址法示例中提到的序列使用拉链法,得到的结果如下图所示:
107107

108-
<div align="center"><img src="https://upload-images.jianshu.io/upload_images/3101171-c14e03882e8a0f3a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"/></div>
108+
<div align="center"><img src="https://upload-images.jianshu.io/upload_images/3101171-c14e03882e8a0f3a.png"/></div>
109109

110110
## 实现一个哈希表
111111

docs/algorithm/search/linear-list-search.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ public int binarySearch(int[] list, int length, int key) {
150150

151151
下图就是一个分块查找表的存储结构示意图
152152

153-
<div align="center"><img src="https://upload-images.jianshu.io/upload_images/3101171-b7ad44c68d0c3c75.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"/></div>
153+
<div align="center"><img src="https://upload-images.jianshu.io/upload_images/3101171-b7ad44c68d0c3c75.png"/></div>
154154

155155
**基本思想**
156156

docs/algorithm/sort.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666

6767
假设有一个大小为 N 的无序序列。冒泡排序就是要每趟排序过程中通过两两比较,找到第 i 个小(大)的元素,将其往上排。
6868

69-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/algorithm/sort/bubble-sort.png"/></div>
69+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/algorithm/sort/bubble-sort.png!zp"/></div>
7070

7171
以上图为例,演示一下冒泡排序的实际流程:
7272

@@ -209,7 +209,7 @@ public void bubbleSort_2(int[] list) {
209209

210210
详细的图解往往比大堆的文字更有说明力,所以直接上图:
211211

212-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/algorithm/sort/quick-sort.png"/></div>
212+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/algorithm/sort/quick-sort.png!zp"/></div>
213213

214214
上图中,演示了快速排序的处理过程:
215215

@@ -314,7 +314,7 @@ private void quickSort(int[] list, int left, int right) {
314314

315315
在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程。
316316

317-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/algorithm/sort/insert-sort.png"/></div>
317+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/algorithm/sort/insert-sort.png!zp"/></div>
318318

319319
- 先拿一张 5 在手里,
320320
- 再摸到一张 4,比 5 小,插到 5 前面,
@@ -414,7 +414,7 @@ public void insertSort(int[] list) {
414414

415415
我们来通过演示图,更深入的理解一下这个过程。
416416

417-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/algorithm/sort/shell-sort.png"/></div>
417+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/algorithm/sort/shell-sort.png!zp"/></div>
418418

419419
在上面这幅图中:
420420

@@ -520,7 +520,7 @@ Donald Shell 最初建议步长选择为 N/2 并且对步长取半直到步长
520520

521521
**核心代码**
522522

523-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/algorithm/sort/selection-sort.png"/></div>
523+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/algorithm/sort/selection-sort.png!zp"/></div>
524524

525525
### 算法分析
526526

@@ -574,7 +574,7 @@ Donald Shell 最初建议步长选择为 N/2 并且对步长取半直到步长
574574

575575
其中 i=1,2,…,n/2 向下取整;
576576

577-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/algorithm/sort/heap-sort.png"/></div>
577+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/algorithm/sort/heap-sort.png!zp"/></div>
578578

579579
如上图所示,序列 R{3, 8,15, 31, 25} 是一个典型的小根堆。
580580

@@ -608,13 +608,13 @@ Donald Shell 最初建议步长选择为 N/2 并且对步长取半直到步长
608608

609609
设有一个无序序列 { 1, 3,4, 5, 2, 6, 9, 7, 8, 0 }。
610610

611-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/algorithm/sort/heap-sort-02.png"/></div>
611+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/algorithm/sort/heap-sort-02.png!zp"/></div>
612612

613613
构造了初始堆后,我们来看一下完整的堆排序处理:
614614

615615
还是针对前面提到的无序序列 { 1,3, 4, 5, 2, 6, 9, 7, 8, 0 } 来加以说明。
616616

617-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/algorithm/sort/heap-sort-03.png"/></div>
617+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/algorithm/sort/heap-sort-03.png!zp"/></div>
618618

619619
相信,通过以上两幅图,应该能很直观的演示堆排序的操作处理。
620620

@@ -783,7 +783,7 @@ public void Merge(int[] array, int low, int mid, int high) {
783783

784784
掌握了合并的方法,接下来,让我们来了解**如何分解**
785785

786-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/algorithm/sort/merge-sort.png"/></div>
786+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/algorithm/sort/merge-sort.png!zp"/></div>
787787

788788
在某趟归并中,设各子表的长度为 **gap**,则归并前 R[0...n-1] 中共有 **n/gap** 个有序的子表:`R[0...gap-1]`, `R[gap...2*gap-1]`, ... , `R[(n/gap)*gap ... n-1]`
789789

@@ -877,7 +877,7 @@ public int[] sort(int[] list) {
877877

878878
我们先根据序列的个位数的数字来进行分类,将其分到指定的桶中。例如:R[0] = 50,个位数上是 0,将这个数存入编号为 0 的桶中。
879879

880-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/algorithm/sort/radix-sort.png"/></div>
880+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/algorithm/sort/radix-sort.png!zp"/></div>
881881

882882
分类后,我们在从各个桶中,将这些数按照从编号 0 到编号 9 的顺序依次将所有数取出来。
883883

docs/data-structure/array.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
这里有一个例子:
2828

29-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/data-structure/array/一维数组.png"/></div>
29+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/data-structure/array/一维数组.png!zp"/></div>
3030

3131
在上面的例子中,数组 A 中有 6 个元素。也就是说,A 的长度是 6 。我们可以使用 A[0] 来表示数组中的第一个元素。因此,A[0] = 6 。类似地,A[1] = 3,A[2] = 8,依此类推。
3232

@@ -42,15 +42,15 @@
4242

4343
下图显示了*大小为 M \* N 的数组 A* 的实际结构:
4444

45-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/data-structure/array/C++二维数组.png"/></div>
45+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/data-structure/array/C++二维数组.png!zp"/></div>
4646

4747
因此,如果我们将 A 定义为也包含 _M \* N_ 个元素的一维数组,那么实际上 A[i][j] 就等于 A[i * N + j]
4848

4949
**2. 在 Java 中,二维数组实际上是包含着 M 个元素的一维数组,每个元素都是包含有 N 个整数的数组。**
5050

5151
下图显示了 Java 中二维数组 A 的实际结构:
5252

53-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/data-structure/array/JAVA二维数组.png"/></div>
53+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/data-structure/array/JAVA二维数组.png!zp"/></div>
5454

5555
二维数组示例:
5656

docs/data-structure/graph.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
在计算机科学中,一个图就是一些*顶点*的集合,这些顶点通过一系列**结对(连接)。顶点用圆圈表示,边就是这些圆圈之间的连线。顶点之间通过边连接。
44

5-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/data-structure/graph/graph.png"/></div>
5+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/data-structure/graph/graph.png!zp"/></div>
66

77
## 术语
88

docs/data-structure/hash.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
### 哈希函数示例
3838

39-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/data-structure/hash/哈希函数.png"/></div>
39+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/data-structure/hash/哈希函数.png!zp"/></div>
4040

4141
在示例中,我们使用 y = x % 5 作为哈希函数。让我们使用这个例子来完成插入和搜索策略:
4242

@@ -56,7 +56,7 @@
5656

5757
下面是一些哈希函数的示例:
5858

59-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/data-structure/hash/哈希函数示例.png"/></div>
59+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/data-structure/hash/哈希函数示例.png!zp"/></div>
6060

6161
哈希函数的设计是一个开放的问题。其思想是尽可能将键分配到桶中,理想情况下,完美的哈希函数将是键和桶之间的一对一映射。然而,在大多数情况下,哈希函数并不完美,它需要在桶的数量和桶的容量之间进行权衡。
6262

docs/data-structure/heap.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
堆是一种特殊的基于树的满足某些特性的数据结构,整个堆中的所有父子节点的键值都会满足相同的排序条件。堆更准确地可以分为最大堆与最小堆,在最大堆中,父节点的键值永远大于或者等于子节点的值,并且整个堆中的最大值存储于根节点;而最小堆中,父节点的键值永远小于或者等于其子节点的键值,并且整个堆中的最小值存储于根节点。
44

5-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/data-structure/heap/heap.png"/></div>
5+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/data-structure/heap/heap.png!zp"/></div>
66

77
时间复杂度:
88

docs/data-structure/list.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
下面是一个单链表的例子:
88

9-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/data-structure/list/单链表.png"/></div>
9+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/data-structure/list/单链表.png!zp"/></div>
1010

1111
蓝色箭头显示单个链接列表中的结点是如何组合在一起的。
1212

@@ -18,6 +18,6 @@
1818

1919
让我们看一个例子:
2020

21-
<div align="center"><img src="https://gitee.com/turnon/images/raw/master/images/data-structure/list/双链表.png"/></div>
21+
<div align="center"><img src="http://dunwu.test.upcdn.net/images/data-structure/list/双链表.png!zp"/></div>
2222

2323
绿色箭头表示我们的“prev”字段是如何工作的。

0 commit comments

Comments
 (0)