时间复杂度:抛开与计算机硬件、软件有关的因素,一个程序的运行时间依赖于算法的好坏和问题的输入规模。语句总的执行次数 T(n)是关于问题规模 n 的函数,进而分析 T(n)随 n 的变化情况并确定 T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)= O(f(n)),在计算机科学,称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
空间复杂度:空间复杂度简单来说就是这段代码占内存的大小,它与时间复杂度都是用 O 表示法。在现代计算机科学,计算机的内存基本满足需求,所以采用[空间换时间]的办法,我们在考察一个算法优劣,一般只关注时间复杂度。
最坏复杂度:最坏时间复杂度,简称最坏复杂度
最好复杂度:最好时间复杂度,简称最好复杂度
平均复杂度:平均时间复杂度,简称平均复杂度
顺序搜索
顺序搜索也称为线形搜索,属于无序查找算法。
算法原理
思路:从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值 k 相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于 k 的结点,表示查找失败。
适用性:顺序搜索适合于存储结构为顺序存储或链接存储的线性表
复杂度分析
最坏复杂度: 从一个线性表依次查找对应项,需要做 n 次查找,在最后一项才查找到对应项或者查找失败(仍然未查找到对应项),时间复杂度为 O(n)
import math
def jumpsearch(sorted_sequence,target):
n=len(sorted_sequence)
step=int(math.floor(math.sqrt(n)))
prev=0
while sorted_sequence[min(step,n)-1]<target: #按照固定步长跳越
prev=step
step=step+int(math.floor(math.sqrt(n)))
if prev>=n:
return None
while sorted_sequence[prev]<target: #线性搜索
prev=prev+1
if prev==min(step,n):
return None
if sorted_sequence[prev]==target:
return prev
else:
return None
if __name__=='__main__':
sorted_sequence=[i for i in range(1,10001,2)]
target=521
index=jumpsearch(sorted_sequence,target)
print(index)
快速搜索
快速搜索(quick search),快速选择是一种选择算法,用于查找无序列表中的第 k 个最小元素,它与快速排序算法有关。