欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简单查找算法

程序员文章站 2022-03-13 12:52:41
...

最近感觉自己需要一点算法知识,所以就学习了一下算法,并做一下笔记。废话不多说开始吧


找数

  • 假设我们要在1到100中的一百个整数找一个指定大小的整数,要找多久呢?
    设这个数为10,若我们按顺序找
    A:是 1 ?
    B:小了
    A :是 2 ?
    B : 小了


    A:是 10 ?
    B:对
    整个过程进行了十次,若我要找的数不是10,而是99,那不是要找99次,有没有一种更快的查找方法呢?
  • 这次我们换一种方法找,假设我们要找60,。从50开始
    A:50 ?
    B:小了。(说明1-50都比这个数小)
    A:75 ?(在50-100中取中间数)
    B:大了。(说明这个数比75-100都小)
    A:62 ?(在50-75取中间数,向下取整,依次类推,直到找出那个数)
    B:大了。
    A:56 ?
    B:小了。
    A:59 ?
    B:小了。
    A:60?
    B:对了。
    每次A 同学猜测都是在已知最小数和最大数两者平均值猜测,直至最后结果。
    这样查找最多有多少步。
    100->50->25->12->6->3->1
    最多5步。
    在1-100这100个整数中,无论要查什么数,判断它是否存在这100个数中,最多需要5步。
  • 若我们不止100个数,而是1000个,10000个,甚至上亿的数据。
    如果我们一个个查找,最多需要n次(n为数据总数),
    而换一种方法则是log2 N 次
    这就大量节省查找时间
  • 这种查找方法就叫二分法查找

二分法查找

#python3
def (list , item): #list必须是有序的
	high = len(list) - 1
	low = 0
	while low <= high:
		mid = int((high + low) / 2) #保证为整数,python默认向下取整
		if item >list[mid]:
			low = mid +1
		elif item < list[mid]:
			high = mid - 1
		else:
			return list[mid]
	return -1
相关标签: 算法 二分法