auto commit
This commit is contained in:
parent
dff3e7ddc5
commit
c9043ae540
24
notes/算法.md
24
notes/算法.md
@ -25,8 +25,7 @@
|
|||||||
* [桶排序](#桶排序)
|
* [桶排序](#桶排序)
|
||||||
* [基数排序](#基数排序)
|
* [基数排序](#基数排序)
|
||||||
* [外部排序](#外部排序)
|
* [外部排序](#外部排序)
|
||||||
* [排序算法的比较](#排序算法的比较)
|
* [小结](#小结)
|
||||||
* [Java 的排序算法实现](#java-的排序算法实现)
|
|
||||||
* [六、查找](#六查找)
|
* [六、查找](#六查找)
|
||||||
* [链表实现无序符号表](#链表实现无序符号表)
|
* [链表实现无序符号表](#链表实现无序符号表)
|
||||||
* [二分查找实现有序符号表](#二分查找实现有序符号表)
|
* [二分查找实现有序符号表](#二分查找实现有序符号表)
|
||||||
@ -34,7 +33,7 @@
|
|||||||
* [2-3 查找树](#2-3-查找树)
|
* [2-3 查找树](#2-3-查找树)
|
||||||
* [红黑树](#红黑树)
|
* [红黑树](#红黑树)
|
||||||
* [散列表](#散列表)
|
* [散列表](#散列表)
|
||||||
* [应用](#应用)
|
* [小结](#小结)
|
||||||
* [参考资料](#参考资料)
|
* [参考资料](#参考资料)
|
||||||
<!-- GFM-TOC -->
|
<!-- GFM-TOC -->
|
||||||
|
|
||||||
@ -1108,7 +1107,9 @@ public class HeapSort {
|
|||||||
|
|
||||||
## 外部排序
|
## 外部排序
|
||||||
|
|
||||||
## 排序算法的比较
|
## 小结
|
||||||
|
|
||||||
|
### 1. 排序算法的比较
|
||||||
|
|
||||||
| 算法 | 稳定 | 原地排序 | 时间复杂度 | 空间复杂度 | 备注 |
|
| 算法 | 稳定 | 原地排序 | 时间复杂度 | 空间复杂度 | 备注 |
|
||||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||||
@ -1122,7 +1123,7 @@ public class HeapSort {
|
|||||||
|
|
||||||
快速排序是最快的通用排序算法,它的内循环的指令很少,而且它还能利用缓存,因为它总是顺序地访问数据。它的运行时间近似为 \~cNlogN,这里的 c 比其他线性对数级别的排序算法都要小。使用三向切分快速排序,实际应用中可能出现的某些分布的输入能够达到线性级别,而其它排序算法仍然需要线性对数时间。
|
快速排序是最快的通用排序算法,它的内循环的指令很少,而且它还能利用缓存,因为它总是顺序地访问数据。它的运行时间近似为 \~cNlogN,这里的 c 比其他线性对数级别的排序算法都要小。使用三向切分快速排序,实际应用中可能出现的某些分布的输入能够达到线性级别,而其它排序算法仍然需要线性对数时间。
|
||||||
|
|
||||||
## Java 的排序算法实现
|
### 2. Java 的排序算法实现
|
||||||
|
|
||||||
Java 主要排序方法为 java.util.Arrays.sort(),对于原始数据类型使用三向切分的快速排序,对于引用类型使用归并排序。
|
Java 主要排序方法为 java.util.Arrays.sort(),对于原始数据类型使用三向切分的快速排序,对于引用类型使用归并排序。
|
||||||
|
|
||||||
@ -1974,17 +1975,18 @@ private void resize(int cap) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 应用
|
## 小结
|
||||||
|
|
||||||
### 1. 各种符号表实现的比较
|
### 1. 符号表算法比较
|
||||||
|
|
||||||
| 算法 | 插入 | 查找 | 是否有序 |
|
| 算法 | 插入 | 查找 | 是否有序 |
|
||||||
| :---: | :---: | :---: | :---: |
|
| :---: | :---: | :---: | :---: |
|
||||||
| 二分查找实现的有序表 | N | logN | yes |
|
| 二分查找实现的有序表 | N | logN | yes |
|
||||||
| 二叉查找树 | logN | logN | yes |
|
| 二叉查找树 | logN | logN | yes |
|
||||||
| 2-3 查找树 | logN | logN | yes |
|
| 2-3 查找树 | logN | logN | yes |
|
||||||
|
| 链表实现的有序表 | N | N | no |
|
||||||
| 拉链法实现的散列表 | N/M | N/M | no |
|
| 拉链法实现的散列表 | N/M | N/M | no |
|
||||||
| 线性探测法试下的散列表 | 1 | 1 | no |
|
| 线性探测法实现的散列表 | 1 | 1 | no |
|
||||||
|
|
||||||
应当优先考虑散列表,当需要有序性操作时使用红黑树。
|
应当优先考虑散列表,当需要有序性操作时使用红黑树。
|
||||||
|
|
||||||
@ -1993,11 +1995,7 @@ private void resize(int cap) {
|
|||||||
- java.util.TreeMap:红黑树
|
- java.util.TreeMap:红黑树
|
||||||
- java.util.HashMap:拉链法的散列表
|
- java.util.HashMap:拉链法的散列表
|
||||||
|
|
||||||
### 3. 集合类型
|
### 3. 稀疏向量乘法
|
||||||
|
|
||||||
除了符号表,集合类型也经常使用,它只有键没有值,可以用集合类型来存储一系列的键然后判断一个键是否在集合中。
|
|
||||||
|
|
||||||
### 4. 稀疏向量乘法
|
|
||||||
|
|
||||||
当向量为稀疏向量时,可以使用符号表来存储向量中的非 0 索引和值,使得乘法运算只需要对那些非 0 元素进行即可。
|
当向量为稀疏向量时,可以使用符号表来存储向量中的非 0 索引和值,使得乘法运算只需要对那些非 0 元素进行即可。
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user