查找表:同种类型的数据元素构成的集合
查找基本操作:
1、查找某个数据元素是否在查找表中
2、检索某个数据元素的各种属性
3、在查找表中插入一个数据元素
4、在查找表中删除某个数据元素
以上简称(增、删、查、改)
查找表分类:
1、静态查找表:
仅作查询和检索操作的查找 表
2、动态查找表
查询结果不在查找表中,将数据元素插入到查找表中
查询结果在查找表中,将数据元素进行删除
在查找过程中,往往依赖于数据元素的某个数据项进行查找,这个数据项通常称为关键字
关键字:是数据元素中某个数据项的值,用以标识一个数据元素,
若关键字能唯一标识一个数据元素,则称为主关键字
若关键字能标识若干个元素,则称为次关键字
平均查找长度:(比较算法效率)
ASL=P1C1+P2C2+...+PnCn
Pi--查找第i个元素的概率
Ci--查找第i个元素需要比较次数
通常举例一个列表然后进行假设然后计算其查找长度,
常的查找:
顺序查找、二分查找、索引查找、哈希查找
顺序查找:依次比较,然后查找所有的元素
def seq_search(lst, key):
found = False
pos = 0
while pos < len(lst) and not found:
if lst[pos] == key:
found = True
else:
pos = pos + 1
return found
def seq_search(s, a):
for i in range(len(a)):
if s == a[i]:
return True
return False
空间复杂度:O(1)
时间复杂度:O(n)
等概率条件下...平均查找长度:ASL = (n+....+2+1)/n= (n+1)/2
二分查找:是有序的线性表
a[n/2]每次查找
#自定义函数,实现二分查找,并返回查找结果
def binary_search(find, list1) :
low = 0
high = len(list1)
while low <= high :
mid = (low + high) // 2
if list1[mid] == find :
return mid
#左半边
elif list1[mid] > find :
high = mid -1
#右半边
else :
low = mid + 1
#未找到返回-1
return -1
时间复杂度是O(log(n)),
最坏情况下的时间复杂度是O(n)
平均查找长度:
索引查找(分块查找):先分块,块间有序,然后查找,有其指针项与最大关键字项
索引表查找-查找表查找
哈希查找:通过哈希函数映射地址的规律进行数据查找