一般我们在解决问题时候,经常能碰到好几种解决方式,总归是有最优,还有最不推荐的选择的,针对搜索算法也一样,因为能实现的方式也有很多个,因此,不知道大家在什么场景里使用这些算法,反正小编都把这些算法整理出来了,供大家选择,另外针对个人理解,大家也可以参考哪个更好使用哦~
搜索算法
线性搜索
按一定的顺序检查数组中每一个元素,直到找到所要寻找的特定值为止。是最简单的一种搜索算法。
二分搜索算法
这种搜索算法每一次比较都使搜索范围缩小一半。
插值搜索算法
是根据要查找的关键字key与顺序表中最大、最小记录的关键字比较后的查找方法,它假设输入数组是线性增加的。
跳跃搜索算法
需要通过固定的跳跃间隔,这样它相比二分查找效率提高了很多。
快速选择
快速选择一般是以原地算法的方式实现,除了选出第k小的元素,数据也得到了部分地排序。
禁忌搜索
是一种现代启发式算法,一个用来跳脱局部最优解的搜索方法。
关于算法的知识点扩展:
线性搜索
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))
插值搜索
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))