每个开发者都必须知道的14个数字
Jeff Dean , 一位著名的 Google 工程师, 推出了一个 每个人都必须知道的数字 的潜在数字列表。这个列表对设计大型基础架构的系统是一个巨大的资源。
算法及其复杂性总是会在计算机系统的关键部分出现,但我发现很少有工程师对一个O(n!)级算法相较一个 O(n5) 算法会怎样有很好的理解。
在编码比赛世界里,竞争选手一直在考虑这些优化权衡。毫不奇怪,有一组每个算法设计者都应该知道的数字。
下面的表格显示了不同复杂度算法条件下,在几秒钟内它们可以达到的极限,n是输入量大小。我已经为每个复杂的类型增加了一些算法和数据结构的例子。
n最大值 | 复杂度 | 算法 | 数据结构 |
---|---|---|---|
1,000,000,000 and higher | log n, sqrt n | 对分查找,三元查找, 快速指数,欧几里得算法 | |
10,000,000 | n, n log log n, n log* n | 集合相交, Eratosthenes筛选法,基数排序, KMP算法,拓扑排序,欧拉路径, 强连通分量, 2sat图 | 不相交的集, tries树, 哈希映射, 滚动散列双端队列 |
1,000,000 | n log n | 排序, 分治法, 扫描线算法, Kruskal算法, Dijkstra算法 | 段树, 范围树, 堆, 二叉排序树, 树状数组, 后缀数组 |
100,000 | n log2 n | 分治法 | 2d范围树 |
50,000 | n1.585, n sqrt n | Karatsuba乘法算法, 平方根技巧 | 两层树 |
1000 - 10,000 | n2 | 最大空矩形, Dijkstra算法, 普里姆算法 (密集图) | |
300-500 | n3 | 所有对最短路径, 最大和子阵,原生矩阵乘法, 矩阵链乘积, 高斯消元法, 网络流 | |
30-50 | n4, n5, n6 | ||
25 - 40 | 3n/2, 2n/2 |
相关推荐
云中舞步 2020-11-12
杨德龙 2020-11-11
JohnYork 2020-10-16
wangzhaotongalex 2020-09-22
xiaoseyihe 2020-11-16
不要皱眉 2020-10-14
Crazyshark 2020-11-13
K先生 2020-11-10
momode 2020-09-11
思君夜未眠 2020-09-04
点滴技术生活 2020-08-21
MaggieRose 2020-08-19
kevinweijc 2020-08-18
wintershii 2020-08-17
vapaad 2020-08-17
wera00 2020-08-17
移动开发与培训 2020-08-16
ReunionIsland 2020-08-16
JimyFengqi 2020-08-16