python 常见的查找方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37973607/article/details/86654364

       根据数据量的大小,我们可将查找分为内部查找和外部查找。

  • 内部查找:数据量小的文件可以一次性全部加载到内存中进行查找。
  • 外部查找:数据量大的文件无法一次性加载到内存中处理,而需要使用辅助存储器来分次处理

       如果从另外一个角度来看,查找的技巧又可分为“静态查找”和“动态查找”两种。

  • 静态查找:在查找过程中,查找的表格或文件的内容不会被改动,例如符号表示的查找就是一种静态查找。
  • 动态查找:在查找过程中,查找的表格或文件的内容可能会被改动,例如在树状结构中所谈的B-Tree查找就是一种动态查找。

       查找技巧比较常见的方法有顺序法、二分查找法、斐波拉契法、插值法、哈希法等

一、顺序查找法(线性查找法) 

       顺序查找法是将数据一项一项地按顺序逐个查找,无论数据的顺序怎么样,都是从头到尾遍历一次。此方法的优点是文件在查找前不需要进行任何处理与排序,缺点是查找速度比较慢。时间复杂度为O(n)。

import random
data=[0]*80
for i in range(80):
	data[i]=random.randint(1,150)
def order_Search(val):
	find=0
	for i in range(80):
		if data[i]==val:
			print('在第%d个位置找到键值[%d]'%(i+1,data[i]))
			find=1
	if find==0:
		print('没有找到')

二、二分查找法

       如果要查找的数据已经事先排序好了,就可以使用二分查找法来进行查找。二分查找法是将数据分割成两等份,再比较键值与中间值的大小,如果键值小于中间值,就可以确定要查找的数据的在前半段,否则在后半段。如此分割数次直到找到或确定不存在为止。时间复杂度O(logn)。

def bin_Search(data,val):
	low=0
	high=len(data)-1
	while low<=high:
		mid=(low+high)//2
		if data[mid]<val:
			low=mid+1
		elif data[mid]>val:
			high=mid-1
		else:
			return mid
	return -1
data=[2,4,5,7,9,11,14,17]
item=bin_Search(data,17)
if item==-1:
	print('没有找到')
else:
	print('在第%d个位置找到[%d]'%(item+1,data[item]))
		

三、插值查找法

       按照数据位置的分布,利用公式预测数据所在的位置,再以二分法的方式渐渐逼近。使用插值法是假设数据平均分布在数组中,而每一项数据的差距相当接近或有一定的距离比例。插值法的公式为:

       Mid=low+( (key-data[low])/(data[high]-data[low]))*(high-low)

       其中key是要查找的键,data[high]、data[low]是剩余待查找记录中的最大值和最小值,假设数据项数为n,其插值查找法的步骤如下:

猜你喜欢

转载自blog.csdn.net/m0_37973607/article/details/86654364