auto commit

This commit is contained in:
CyC2018 2018-03-27 10:40:39 +08:00
parent 054a24a54b
commit 27c184f34e

View File

@ -127,7 +127,7 @@ public class ThreeSumFast {
<div align="center"> <img src="../pics//2093ccfa-e560-44f3-84c7-487d66451708.png" width="300"/> </div><br> <div align="center"> <img src="../pics//2093ccfa-e560-44f3-84c7-487d66451708.png" width="300"/> </div><br>
可以看到T(2N)/T(N) \~ 2<sup>3</sup>,因此可以确定 T(N) \~ aN<sup>2</sup>logN。 可以看到T(2N)/T(N) \~ 2<sup>3</sup>,因此可以确定 T(N) \~ aN<sup>3</sup>logN。
## 注意事项 ## 注意事项
@ -610,7 +610,7 @@ private static void sort(Comparable[] a, int lo, int hi) {
因为每次都将问题对半分成两个子问题,而这种对半分的算法复杂度一般为 O(NlogN),因此该归并排序方法的时间复杂度也为 O(NlogN)。 因为每次都将问题对半分成两个子问题,而这种对半分的算法复杂度一般为 O(NlogN),因此该归并排序方法的时间复杂度也为 O(NlogN)。
因为小数组的递归操作会过于频繁,因此可以在数组过小时切换到插入排序来提高性能。 小数组的递归操作会过于频繁,可以在数组过小时切换到插入排序来提高性能。
### 3. 自底向上归并排序 ### 3. 自底向上归并排序
@ -855,7 +855,7 @@ public static void sort(Comparable[] a){
<div align="center"> <img src="../pics//e4ca3383-910a-4936-8ac2-9e8fd31b736b.png" width="800"/> </div><br> <div align="center"> <img src="../pics//e4ca3383-910a-4936-8ac2-9e8fd31b736b.png" width="800"/> </div><br>
快速排序最快的通用排序算法,它的内循环的指令很少,而且它还能利用缓存,因为它总是顺序地访问数据。它的运行时间近似为 \~cNlogN这里的 c 比其他线性对数级别的排序算法都要小。使用三向切分之后,实际应用中可能出现的某些分布的输入能够达到线性级别,而其它排序算法仍然需要线性对数时间。 快速排序最快的通用排序算法,它的内循环的指令很少,而且它还能利用缓存,因为它总是顺序地访问数据。它的运行时间近似为 \~cNlogN这里的 c 比其他线性对数级别的排序算法都要小。使用三向切分之后,实际应用中可能出现的某些分布的输入能够达到线性级别,而其它排序算法仍然需要线性对数时间。
### 2. Java 的排序算法实现 ### 2. Java 的排序算法实现
@ -902,7 +902,7 @@ public static Comparable select(Comparable[] a, int k) {
### 3. 二分查找实现有序符号表 ### 3. 二分查找实现有序符号表
使用一对平行数组,一个存储键一个存储值。其中键的数组为 Comparable 数组,值的数为 Object 数组。 使用一对平行数组,一个存储键一个存储值。其中键的数组为 Comparable 数组,值的数为 Object 数组。
rank() 方法至关重要,当键在表中时,它能够知道该键的位置;当键不在表中时,它也能知道在何处插入新键。 rank() 方法至关重要,当键在表中时,它能够知道该键的位置;当键不在表中时,它也能知道在何处插入新键。
@ -1016,7 +1016,7 @@ public class BST<Key extends Comparable<Key>, Value> {
- 如果被查找的键和根节点的键相等,查找命中; - 如果被查找的键和根节点的键相等,查找命中;
- 否则递归地在子树中查找:如果被查找的键较小就在左子树中查找,较大就在右子树中查找。 - 否则递归地在子树中查找:如果被查找的键较小就在左子树中查找,较大就在右子树中查找。
BST 的查找操作每次递归都会让区间减少一半,和二分查找类似,因此查找的复杂度为 O(logn)。 BST 的查找操作每次递归都会让区间减少一半,和二分查找类似,因此查找的复杂度为 O(logN)。
```java ```java
public Value get(Key key) { public Value get(Key key) {
@ -1567,7 +1567,7 @@ private void resize(int cap) {
} }
``` ```
虽然每次重新调整数组都需要重新把每个键值对插入到散列表,但是从摊还分析的角度来看,所需要的代价却是很小的。从下图可以看出,每次数组长度加倍后,累计平均值都会增加 1因为表中每个键都需要重新计算散列值,但是随后平均值会下降。 虽然每次重新调整数组都需要重新把每个键值对插入到散列表,但是从摊还分析的角度来看,所需要的代价却是很小的。从下图可以看出,每次数组长度加倍后,累计平均值都会增加 1这是因为散列表中每个键都需要重新计算散列值。随后平均值会下降。
<div align="center"> <img src="../pics//d7c6c42d-a4d8-4b85-82fb-c21250bf5ca1.png" width="800"/> </div><br> <div align="center"> <img src="../pics//d7c6c42d-a4d8-4b85-82fb-c21250bf5ca1.png" width="800"/> </div><br>