this place is where i take notes from book "algs4"
算法 |
构造函数 |
union() |
find() |
quick-find算法 |
N |
N |
1 |
quick-union算法 |
N |
树的高度 |
树的高度 |
加权quick-union算法 |
N |
lgN |
lgN |
算法 |
是否稳定 |
是否为原地排序 |
时间复杂度 |
空间复杂度 |
备注 |
选择排序 |
否 |
是 |
N^2 |
1 |
|
插入排序 |
是 |
是 |
介于N和N^2之间 |
1 |
取决于输入元素度排列情况 |
希尔排序 |
否 |
是 |
NlogN? or N^6/5 |
1 |
|
快速排序 |
否 |
是 |
NlogN |
lgN |
运行效率由概率提供保证 |
三向快速排序 |
否 |
是 |
介于N和NlogN之间 |
lgN |
运行效率有概率保证,同时也取决于输入元素的分布情况 |
归并排序 |
是 |
否 |
NlogN |
N |
|
堆排序 |
否 |
是 |
NlogN |
1 |
|
算法(数据结构) |
最坏情况下的运行时间的增长数量级(N次插入之后)(查找:插入) |
平均情况下的运行时间的增长数量级(N次随机插入之后)(查找命中:插入) |
关键接口 |
内存使用(字节) |
顺序查找(无序链表) |
N:N |
N/2:N |
equals() |
48N |
二分查找(有序数组) |
lgN:N |
lgN:N/2 |
compareTo() |
16N |
二叉树查找(二叉查找树) |
N:N |
1.39lgN:1.39lgN |
compareTo() |
64N |
2-3树查找(红黑树) |
2lgN:2lgN |
1.00lgN:1.00lgN |
compareTo() |
64N |
拉链法(链表数组) |
<lgN:<lgN |
N/(2M):N/M |
equals() hashCode() |
48N+32M |
线性探测法(并行数组) |
clgN:clgN |
<1.5:<2.5 |
equals() hashCode() |
在32N和128N之间 |
算法 |
是否稳定 |
原地排序 |
在将基于大小为R的字母表的N个字符串排序的过程中调用charAt()方法次数的增长数量级(平均长度为w,最大长度为W)运行时间:额外空间 |
优势领域 |
字符串的插入排序 |
是 |
是 |
N到N^2之间:1 |
小数组或者是已经有序的数组 |
快速排序 |
否 |
是 |
Nlog2N:logN |
通用排序算法,特别适合用于空间不足的情况 |
归并排序 |
是 |
否 |
Nlog2N:N |
稳定的通用排序算法 |
三向快速排序 |
否 |
是 |
N到NlogN之间:logN |
大量重复键 |
低位优先的字符串排序 |
是 |
否 |
NW:N |
较短的定长字符串 |
高位优先的字符串排序 |
是 |
否 |
N到Nw之间:N+WR |
随机字符串 |
三向字符串快速排序 |
否 |
是 |
N到Nw之间:W+logN |
通用排序算法,特别适合用于含有较长前缀的字符串 |
算法(数据结构) |
处理由大小为R的字母表构造的N个字符串(平均长度为w)的增长数量级,未命中查找检查的字符数量:内存使用 |
优点 |
二叉树查找(BST) |
c1(lgN)^2:64N |
适用于随机排列的键 |
2-3树查找(红黑树) |
c2lgN)^2:64N |
有性能保证 |
线性探测法(并行数组) |
w:32N~128N |
内置类型缓存散列值 |
字典树查找(R向单词查找树) |
logRN:(8R+56)N~(8R+56)Nw |
适用于较短的键和较小的字母表 |
字典树查找(三向单词查找树) |
1.39lgN:64N~64Nw |
适用于非随机的键 |
![](https://raw.githubusercontent.com/ejunjsh/algs4/master/images/substring.jpg)