Merge pull request #19 from lidaobing/patch-1

二进制搜索 -> 二分搜索
This commit is contained in:
Damian Gryski 2018-03-08 23:28:38 -08:00 committed by GitHub
commit c5e0ff0418
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -178,7 +178,7 @@ TODO:如何模拟满足的缓存,显示增量成本
基本的复杂类别是: 基本的复杂类别是:
* O(1):字段访问,数组或地图查找 * O(1):字段访问,数组或地图查找
* O(log n)):二进制搜索 * O(log n)):二搜索
* O(n):简单循环 * O(n):简单循环
* O(n\*m):嵌套循环 * O(n\*m):嵌套循环
* O(nlogn):分而治之 * O(nlogn):分而治之
@ -186,7 +186,7 @@ TODO:如何模拟满足的缓存,显示增量成本
链接:bigocheatsheet.com 链接:bigocheatsheet.com
假设你需要搜索未分类的数据集。“我应该用二进制搜索”,你知道一个二进制搜索O(log n)比O(n)线性扫描快。但是二分查找需要对数据进行排序这意味着你需要先对它进行排序这将花费O(n log n)时间。如果你正在进行大量搜索那么分类的前期成本将会得到回报。另一方面如果你主要做查询也许有一个数组是错误的选择你最好支付O(1)查找地图的代价。 假设你需要搜索未分类的数据集。“我应该用二分搜索”,你知道一个二分搜索O(log n)比O(n)线性扫描快。但是二分查找需要对数据进行排序这意味着你需要先对它进行排序这将花费O(n log n)时间。如果你正在进行大量搜索那么分类的前期成本将会得到回报。另一方面如果你主要做查询也许有一个数组是错误的选择你最好支付O(1)查找地图的代价。
选择最简单的合理数据结构并继续。CS 101编写“不慢的软件”。别傻了。这应该是你的默认开发模式。如果你知道需要随机访问请不要选择链接列表。如果你知道需要按顺序遍历请不要使用地图。需求变化你不能总是猜测未来。对工作量做出合理的猜测。 选择最简单的合理数据结构并继续。CS 101编写“不慢的软件”。别傻了。这应该是你的默认开发模式。如果你知道需要随机访问请不要选择链接列表。如果你知道需要按顺序遍历请不要使用地图。需求变化你不能总是猜测未来。对工作量做出合理的猜测。
@ -463,4 +463,4 @@ tip.golang.org/doc/diagnostics.html
- 3)当心错误 - 3)当心错误
还要关注GitHub上的其他实现:它们可能与你的bug相同(或不同) 还要关注GitHub上的其他实现:它们可能与你的bug相同(或不同)
https://www.youtube.com/watch?v=8eRx5Wo3xYA http://codecapsule.com/2012/01/18/how-to-implement-a-paper/ https://www.youtube.com/watch?v=8eRx5Wo3xYA http://codecapsule.com/2012/01/18/how-to-implement-a-paper/