时间:2020-11-18来源:www.pcxitongcheng.com作者:电脑系统城
一般我们在解决问题时候,经常能碰到好几种解决方式,总归是有最优,还有最不推荐的选择的,针对搜索算法也一样,因为能实现的方式也有很多个,因此,不知道大家在什么场景里使用这些算法,反正小编都把这些算法整理出来了,供大家选择,另外针对个人理解,大家也可以参考哪个更好使用哦~
搜索算法
线性搜索
按一定的顺序检查数组中每一个元素,直到找到所要寻找的特定值为止。是最简单的一种搜索算法。
二分搜索算法
这种搜索算法每一次比较都使搜索范围缩小一半。
插值搜索算法
是根据要查找的关键字key与顺序表中最大、最小记录的关键字比较后的查找方法,它假设输入数组是线性增加的。
跳跃搜索算法
需要通过固定的跳跃间隔,这样它相比二分查找效率提高了很多。
快速选择
快速选择一般是以原地算法的方式实现,除了选出第k小的元素,数据也得到了部分地排序。
禁忌搜索
是一种现代启发式算法,一个用来跳脱局部最优解的搜索方法。
关于算法的知识点扩展:
线性搜索
1 2 3 4 5 6 7 8 9 10 11 12 13 |
def linear_search(data, search_for): """线性搜索""" search_at = 0 search_res = False while search_at < len (data) and search_res is False : if data[search_at] = = search_for: search_res = True else : search_at + = 1 return search_res lis = [ 5 , 10 , 7 , 35 , 12 , 26 , 41 ] print (linear_search(lis, 12 )) print (linear_search(lis, 6 )) |
插值搜索
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
def insert_search(data,x): """插值搜索""" idx0 = 0 idxn = ( len (data) - 1 ) while idx0 < = idxn and x > = data[idx0] and x < = data[idxn]: mid = idx0 + int ((( float (idxn - idx0) / (data[idxn] - data[idx0])) * (x - data[idx0]))) if data[mid] = = x: return "在下标为" + str (mid) + "的位置找到了" + str (x) if data[mid] < x: idx0 = mid + 1 return "没有搜索到" + str (x) lis = [ 2 , 6 , 11 , 19 , 27 , 31 , 45 , 121 ] print (insert_search(lis, 31 )) print (insert_search(lis, 3 )) |
到此这篇关于python搜索算法原理及实例讲解的文章就介绍到这了
2023-03-17
python flask项目打包成docker镜像发布的过程2023-03-17
python调试模块ipdb详解2023-03-17
python使用openai生成图像的超详细教程python cron定时任务触发接口自动化巡检 apscheduler报错:Run time of job …… next run at: ……)” was missed by misfire_grace_time参数 找到任务超时的根本原因...
2023-03-15