场景:
有一个一百万条手机号码的文本,给你一个手机号码判断这个手机号码是否存在于这个号码文件,你会如何实现? 遍历查询还是hash映射后再查询?
我的推荐:
我推荐使用二分法查找, 二分法的条件是有序的数组,这个条件可以在数据预处理的时候进行生成即可.
效率对比:
我用代码实现了二分法和遍历查询两种查询, 二分法在100万条数据中查询消耗时间为1.965μs,遍历查询消耗的时间为753.566μs,结果相差了300多倍,如果数据量达到1千万或者1亿,那么这个查询效率就非常的明显了.
代码:
最后我把测试的二分法go代码放上来,大家可以参考下
//二分法
func FindNumberByDichotomy(numbers []int, n int) int {
start := time.Now()
l := len(numbers)
left := 0
right := l – 1
mid := 0
for {
mid = (left + right) / 2
if numbers[mid] > n {
right = mid – 1
} else if numbers[mid] < n {
left = mid + 1
} else {
break
}
}
spt := time.Since(start)
fmt.Println("二分法执行时间: ", spt)
return mid + 1
}
声明:声明:本站资源来自会员发布以及互联网公开收集,不代表本站立场,仅限学习交流使用,请遵循相关法律法规,请在下载后24小时内删除。 如有侵权争议、不妥之处请(发到邮箱77562245@qq.com)联系本站删除处理! 请用户仔细辨认内容的真实性,避免上当受骗!