|
16 | 16 |
|
17 | 17 | ## 重要链接
|
18 | 18 |
|
19 |
| -[什么是算法和数据结构?](What are Algorithms.markdown)-薄饼! |
| 19 | +[什么是算法和数据结构?](What%20are%20Algorithms.markdown)-薄饼! |
20 | 20 |
|
21 |
| -[为什么要学习算法?](Why Algorithms.markdown)-还在担心这不是你的菜吗?请读一下这篇文章。 |
| 21 | +[为什么要学习算法?](Why%20Algorithms.markdown)-还在担心这不是你的菜吗?请读一下这篇文章。 |
22 | 22 |
|
23 |
| -[大 O 表示法](Big-O Notation.markdown)-我们经常会听到这样的话:“这个算法是 O(n) 的”。如果你不知道这是啥意思,请读读这篇文章。 |
| 23 | +[大 O 表示法](Big-O%20Notation.markdown)-我们经常会听到这样的话:“这个算法是 O(n) 的”。如果你不知道这是啥意思,请读读这篇文章。 |
24 | 24 |
|
25 |
| -[*算法设计技巧](Algorithm Design.markdown)-怎样设计自己的算法? |
| 25 | +[*算法设计技巧](Algorithm%20Design.markdown)-怎样设计自己的算法? |
26 | 26 |
|
27 |
| -[欢迎参与翻译!](How to Contribute.markdown)-如果有意参与翻译,请阅读注意事项! |
| 27 | +[欢迎参与翻译!](How%20to%20Contribute.markdown)-如果有意参与翻译,请阅读注意事项! |
28 | 28 |
|
29 | 29 | ## 从哪开始?
|
30 | 30 |
|
31 | 31 | 如果你之前没有接触过算法和数据结构,你可以从下面这些简单易懂的算法开始看起:
|
32 | 32 |
|
33 | 33 | - [栈](Stack/)
|
34 | 34 | - [队列](Queue/)
|
35 |
| -- [*插入排序](Insertion Sort/) |
36 |
| -- [*二分搜索](Binary Search/)和[*二分搜索树](Binary Search Tree/) |
37 |
| -- [*归并排序](Merge Sort/) |
| 35 | +- [*插入排序](Insertion%20Sort/) |
| 36 | +- [*二分搜索](Binary%20Search/)和[*二分搜索树](Binary%20Search%20Tree/) |
| 37 | +- [*归并排序](Merge%20Sort/) |
38 | 38 | - [*Boyer-Moore 字符串搜索算法](Boyer-Moore/)
|
39 | 39 |
|
40 | 40 | ## 算法列表
|
41 | 41 |
|
42 | 42 | ### 搜索算法
|
43 | 43 |
|
44 |
| -- [*线性搜索](Linear Search/)-从数组中查找某个元素。 |
45 |
| -- [*二分搜索](Binary Search/)-从已排序的数组中快速查找元素。 |
46 |
| -- [*统计出现次数](Count Occurrences/)-统计某个值在数组中的出现次数。 |
47 |
| -- [*查找最大/最小值](Select Minimum Maximum)-找到数组中的最大/最小值。 |
48 |
| -- [*第 K 大元素](Kth Largest Element/)-找到数组中的第 **K** 大元素,例如中位数。 |
49 |
| -- [*选取样本](Selection Sampling/)-随机地从集合中选取一些元素作为样本。 |
| 44 | +- [*线性搜索](Linear%20Search/)-从数组中查找某个元素。 |
| 45 | +- [*二分搜索](Binary%20Search/)-从已排序的数组中快速查找元素。 |
| 46 | +- [*统计出现次数](Count%20Occurrences/)-统计某个值在数组中的出现次数。 |
| 47 | +- [*查找最大/最小值](Select%20Minimum%20Maximum)-找到数组中的最大/最小值。 |
| 48 | +- [*第 K 大元素](Kth%20Largest%20Element/)-找到数组中的第 **K** 大元素,例如中位数。 |
| 49 | +- [*选取样本](Selection%20Sampling/)-随机地从集合中选取一些元素作为样本。 |
50 | 50 | - [*并查集](Union-Find/)-保持一些不相交的集合,帮助你快速合并它们。
|
51 | 51 |
|
52 | 52 | ### 字符串搜索算法
|
53 | 53 |
|
54 |
| -- [*Brute-Force 算法](Brute-Force String Search/)-一个简单粗暴的方法。 |
| 54 | +- [*Brute-Force 算法](Brute-Force%20String%20Search/)-一个简单粗暴的方法。 |
55 | 55 | - [*Boyer-Moore 算法](Boyer-Moore/)-一种高效的字符串子串搜索算法。它不需要对被搜索的字符串中的字符进行逐一比较,而是根据一个查找表跳过其中的某些部分。
|
56 | 56 | - Rabin-Karp 算法
|
57 |
| -- [*最长公共子序列算法](Longest Common Subsequence/)-找到两个字符串中的最长公共子序列。 |
| 57 | +- [*最长公共子序列算法](Longest%20Common%20Subsequence/)-找到两个字符串中的最长公共子序列。 |
58 | 58 |
|
59 | 59 | ### 排序算法
|
60 | 60 |
|
61 | 61 | 探究排序算法的工作原理是非常有趣的,但在实际的编码中,你几乎永远也不会需要自己编写排序算法,Swift 自带的 `sort()` 函数已经非常够用了,但如果你还是好奇背后的原理,请继续阅读。
|
62 | 62 |
|
63 | 63 | 基本的排序算法:
|
64 | 64 |
|
65 |
| -- [*插入排序](Insertion Sort/) |
66 |
| -- [*选择排序](Selection Sort/) |
67 |
| -- [*希尔排序](Shell Sort/) |
| 65 | +- [*插入排序](Insertion%20Sort/) |
| 66 | +- [*选择排序](Selection%20Sort/) |
| 67 | +- [*希尔排序](Shell%20Sort/) |
68 | 68 |
|
69 | 69 | 快速的排序算法:
|
70 | 70 |
|
71 | 71 | - [*快速排序](Quicksort/)
|
72 |
| -- [*归并排序](Merge Sort/) |
73 |
| -- [*堆排序](Heap Sort/) |
| 72 | +- [*归并排序](Merge%20Sort/) |
| 73 | +- [*堆排序](Heap%20Sort/) |
74 | 74 |
|
75 | 75 | 特殊的排序算法
|
76 | 76 |
|
77 |
| -- [*桶排序](Bucket Sort/) :construction: |
78 |
| -- [*计数排序](Counting Sort/) |
| 77 | +- [*桶排序](Bucket%20Sort/) :construction: |
| 78 | +- [*计数排序](Counting%20Sort/) |
79 | 79 | - 基数排序
|
80 |
| -- [*拓扑排序](Topological Sort/) |
| 80 | +- [*拓扑排序](Topological%20Sort/) |
81 | 81 |
|
82 | 82 | 不好的排序算法(知道就行了,不要用!):
|
83 | 83 |
|
84 |
| -- [*冒泡排序](Bubble Sort/) |
| 84 | +- [*冒泡排序](Bubble%20Sort/) |
85 | 85 |
|
86 | 86 | ### 压缩算法
|
87 | 87 |
|
88 |
| -- [*变动长度编码法(RLE)](Run-Length Encoding/)。将重复的值存储为一个单字节及其计数。 |
89 |
| -- [*哈夫曼编码](Huffman Coding/)。将常见的元素使用更小的单位存储。 |
| 88 | +- [*变动长度编码法(RLE)](Run-Length%20Encoding/)。将重复的值存储为一个单字节及其计数。 |
| 89 | +- [*哈夫曼编码](Huffman%20Coding/)。将常见的元素使用更小的单位存储。 |
90 | 90 |
|
91 | 91 | ### 杂项
|
92 | 92 |
|
|
96 | 96 |
|
97 | 97 | - [*最大公约数算法(GCD)](GCD/)-特殊福利:最小公倍数算法。
|
98 | 98 | - [*排列组合算法](Combinatorics/)-还记得高中学过俄组合数学吗?
|
99 |
| -- [*调度场算法](Shunting Yard/)-用于将中缀表达式转换为后缀表达式的经典算法。 |
| 99 | +- [*调度场算法](Shunting%20Yard/)-用于将中缀表达式转换为后缀表达式的经典算法。 |
100 | 100 | - 统计算法
|
101 | 101 |
|
102 | 102 | ### 机器学习
|
|
121 | 121 | ### 数组变体
|
122 | 122 |
|
123 | 123 | - [*二维数组](Array2D/)-固定尺寸的二维数组,可用于棋盘游戏。
|
124 |
| -- [*比特集](Bit Set/)-**n** 位大小固定尺度的序列。 |
125 |
| -- [*固定长度数组](Fixed Size Array/)-如果你确切的知道数据的大小,使用老式的固定长度的数组会更加高效。 |
126 |
| -- [*有序数组](Ordered Array/)-一个永远有序的数组。 |
| 124 | +- [*比特集](Bit%20Set/)-**n** 位大小固定尺度的序列。 |
| 125 | +- [*固定长度数组](Fixed%20Size%20Array/)-如果你确切的知道数据的大小,使用老式的固定长度的数组会更加高效。 |
| 126 | +- [*有序数组](Ordered%20Array/)-一个永远有序的数组。 |
127 | 127 |
|
128 | 128 | ### 队列
|
129 | 129 |
|
130 | 130 | - [栈](Stack/)-后进先出!
|
131 | 131 | - [队列](Queue/)-先进先出!
|
132 | 132 | - [*双端队列](Deque/)
|
133 |
| -- [*优先队列](Priority Queue)-一个保持最重要的元素总是在最前面的队列。 |
134 |
| -- [*有限优先队列](Bounded Priority Queue)-元素最大数受限制的优先队列。 :construction: |
135 |
| -- [*环形缓冲区](Ring Buffer/)-一个语义上的固定大小的环形缓冲区,实际使用的是一维序列头尾相接实现。 |
| 133 | +- [*优先队列](Priority%20Queue)-一个保持最重要的元素总是在最前面的队列。 |
| 134 | +- [*有限优先队列](Bounded%20Priority%20Queue)-元素最大数受限制的优先队列。 :construction: |
| 135 | +- [*环形缓冲区](Ring%20Buffer/)-一个语义上的固定大小的环形缓冲区,实际使用的是一维序列头尾相接实现。 |
136 | 136 |
|
137 | 137 | ### 列表
|
138 | 138 |
|
139 |
| -- [*链表](Linked List/)-链接起来的数据序列。包含单向和双向链表。 |
| 139 | +- [*链表](Linked%20List/)-链接起来的数据序列。包含单向和双向链表。 |
140 | 140 | - 跳跃列表
|
141 | 141 |
|
142 | 142 | ### 树
|
143 | 143 |
|
144 | 144 | - [*树](Tree/)-通用目的的树形结构。
|
145 |
| -- [*二叉树](Binary Tree/)-一种节点最多有两个孩子节点的树形结构。 |
146 |
| -- [*二叉搜索树(BST)](Binary Search Tree/)-以某种方式组织自己的节点的二叉树,以求较快的查询速度。 |
147 |
| -- [*AVL 树](AVL Tree/)-一种通过旋转来维持平衡的二叉搜索树。 :construction: |
| 145 | +- [*二叉树](Binary%20Tree/)-一种节点最多有两个孩子节点的树形结构。 |
| 146 | +- [*二叉搜索树(BST)](Binary%20Search%20Tree/)-以某种方式组织自己的节点的二叉树,以求较快的查询速度。 |
| 147 | +- [*AVL 树](AVL%20Tree/)-一种通过旋转来维持平衡的二叉搜索树。 :construction: |
148 | 148 | - 红黑树
|
149 | 149 | - 伸展树
|
150 | 150 | - 线索二叉树
|
151 |
| -- [*线段树](Segment Tree/)-能够快速地对某区间进行计算。 |
| 151 | +- [*线段树](Segment%20Tree/)-能够快速地对某区间进行计算。 |
152 | 152 | - k-d 树
|
153 | 153 | - [*堆](Heap/)-存储在一维数组中的二叉树,所以它不需要使用指针。很适合做为优先队列使用。
|
154 | 154 | - 斐波那契堆
|
155 | 155 | - 字典树(Trie)
|
156 | 156 | - B 树
|
157 |
| -- [*基数树](Radix Tree/) :construction: |
| 157 | +- [*基数树](Radix%20Tree/) :construction: |
158 | 158 |
|
159 | 159 | ### 哈希
|
160 | 160 |
|
161 |
| -- [*哈希表](Hash Table/)-允许你通过一个关键词来存取数据。字典通常都是基于哈希表实现的。 |
| 161 | +- [*哈希表](Hash%20Table/)-允许你通过一个关键词来存取数据。字典通常都是基于哈希表实现的。 |
162 | 162 | - 哈希函数
|
163 | 163 |
|
164 | 164 | ### 集合
|
165 | 165 |
|
166 |
| -- [*布隆过滤器](Bloom Filter/)-一个常量内存数据结构,用于概率性的检测某个元素是否在集合中。 |
167 |
| -- [*哈希集合](Hash Set/)-使用哈希表实现的集合。 |
| 166 | +- [*布隆过滤器](Bloom%20Filter/)-一个常量内存数据结构,用于概率性的检测某个元素是否在集合中。 |
| 167 | +- [*哈希集合](Hash%20Set/)-使用哈希表实现的集合。 |
168 | 168 | - 多重集
|
169 |
| -- [*有序集](Ordered Set/)-很看重元素顺序的集合。 |
| 169 | +- [*有序集](Ordered%20Set/)-很看重元素顺序的集合。 |
170 | 170 |
|
171 | 171 | ### 图
|
172 | 172 |
|
173 | 173 | - [*图](Graph/)
|
174 |
| -- [*广度优先搜索(BFS)](Breadth-First Search/) |
175 |
| -- [*深度优先搜索(DFS)](Depth-First Search/) |
176 |
| -- [*最短路径算法](Shortest Path %28Unweighted%29/)-作用对象为无权值树。 |
177 |
| -- [*最小生成树](Minimum Spanning Tree %28Unweighted%29/)-作用对象为无权值树。 |
178 |
| -- [*任意两点间的最短路径算法](All-Pairs Shortest Paths/) |
| 174 | +- [*广度优先搜索(BFS)](Breadth-First%20Search/) |
| 175 | +- [*深度优先搜索(DFS)](Depth-First%20Search/) |
| 176 | +- [*最短路径算法](Shortest%20Path%20%28Unweighted%29/)-作用对象为无权值树。 |
| 177 | +- [*最小生成树](Minimum%20Spanning%20Tree%20%28Unweighted%29/)-作用对象为无权值树。 |
| 178 | +- [*任意两点间的最短路径算法](All-Pairs%20Shortest%20Paths/) |
179 | 179 |
|
180 | 180 | ## 智力题
|
181 | 181 |
|
182 | 182 | 很多程序员在面试时都会被问到一些算法性质的智力题。这里只囊括了一点比较有趣的。想了解更多的智力题(及答案),请浏览[这里](http://elementsofprogramminginterviews.com/),还有[这里](http://www.crackingthecodinginterview.com)。
|
183 | 183 |
|
184 |
| -- [*二和问题](Two-Sum Problem/) |
185 |
| -- [*Fizz Buzz](Fizz Buzz/) |
186 |
| -- [*蒙提霍尔问题](Monty Hall Problem/) |
| 184 | +- [*二和问题](Two-Sum%20Problem/) |
| 185 | +- [*Fizz Buzz](Fizz%20Buzz/) |
| 186 | +- [*蒙提霍尔问题](Monty%20Hall%20Problem/) |
187 | 187 |
|
188 | 188 | ## 学无止境!
|
189 | 189 |
|
|
0 commit comments