###背景介绍
算法 这个近两年由于大数据人工智能的兴起而被提及最多的关键词之一,从而在IT这个猿类圈中有了基因变异-算法工程师,被其他老猿类羡慕嫉妒恨,其实我觉得也没必要去羡慕,做好我们自己在本职的岗位做到优秀也不会比别人差的,有的测试猿说测试不需要了解或者研究算法,根本没毛线用,原来我也是这么认为,不过随着时间的推移猿类世界的基因突变,越来越发现不了解不懂算法会越来越没有竞争力,不为别的为了升职加薪你也得学啊,当然在测试过程中也更有助于我们了解需求,比如我们的项目就用到了一致性哈希算法,以及广度优先图的概念,二分查找等所以是有很大必要的。测试猿们,我们可以不需要每个算法都精通熟悉,但是基础的我们还是要必须知道地,以下就对这些常见的基础的一些算法做一些个人的总结与理解,有不对的地方还请各位大神指正!
###二分查找
假设在电话本虽然我们都不用电话本了中查找以我博客名allen的首字母A开头的人很容易第一次就能查到所有以A开头的人,那么假如是K呢你可能想到直接从中间找啊,还有假如要登陆CSDN,csdn必须要检查你是否拥有其网站的账户,假如你的名字也是K开头网站要从A开始查找,其实更科学的方式是从中间开始,所以基于以上情况都可以使用同一算法解决此问题,这种算法就是***二分查找***
###举个栗子
假如要从1-100中随便猜一个数字,你每次猜后我都会说大或者小了,假设你从1开始猜,过程大概就是假如你要猜的是100那么很不幸你要猜99次,当然单反有点脑子的肯定都是随机猜,当然还有更佳的方式,那就是从50开始。过程如下。
1,2,3,4,5,6,7,8,9。。。。。。。。。100
- 50 小了 但是排除了一半的数字
- 75 大了 余下的数字又减少了一半
- 。。。。。
- 每次都从剩下的数字排除了一半
每次猜排除数字的个数如下
100个元素–>50–>25–>13–7--4–2--1(对了)
所以不论猜的是什么,在7次之内都能猜到,每次都能排除一半的假答案
所以
对于二分查找,对于包含n个元素的列表用二分查找最多可以需要log^n步(对坐Log 以2为低n 的对数)
下面让我们来实现二分查找,下面是一个猜数字的游戏,每一次我们都从中间猜起,以一个List为例子,如果猜中就返回其位置,设定两个边界值
- low = 0
- high = len(list)-1
每次都从中间猜起是:mid = (low+high) / 2 如果mid不是整数,python会自动向下取整guess = list[mid]
完整代码如下
#list为传入的猜的列表,onj_num 为目标数
def guess_num(list,obj_num)