场景:

有一个一百万条手机号码的文本,给你一个手机号码判断这个手机号码是否存在于这个号码文件,你会如何实现? 遍历查询还是hash映射后再查询?

手机号码测吉凶(手机号码测吉凶免费)插图

1百万数据文本

我的推荐:

我推荐使用二分法查找, 二分法的条件是有序的数组,这个条件可以在数据预处理的时候进行生成即可.

效率对比:

我用代码实现了二分法和遍历查询两种查询, 二分法在100万条数据中查询消耗时间为1.965μs,遍历查询消耗的时间为753.566μs,结果相差了300多倍,如果数据量达到1千万或者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

}

这是一张图片
专业宝宝起名

添加微信:77562256

免费领取100个高分名字

备注:高分名字,即可领取!

请一定要填写备注,否则不通过!

也可扫码或长按识别下方二维码添加