- 算法初识
- 什么是算法
- 二分查找算法
♣一:算法初识
A:什么是算法
根据人们长时间接触以来,发现计算机在计算某些一些简单的数据的时候会表现的比较笨拙,而这些数据的计算会消耗大量计算机资源,而且耗时,这个时候就有人对这类计算编写了一些策略,这些策略就是算法。这些策略会加快数据计算时间,大大减少计算机的资源消耗。
在长时间人们编写代码的工作中,一些优秀的算法就被流传下来,但是不是所有的算法都能实现目的一步到位的工作,它只能减少你的代码,提高工作效率,随着知识的不断积累,你会发现有更好的办法来完成算法所完成的事情。
B:二分查找算法
当有一个文件,文件里面都是数字,要写一段代码查找用户需要的数字在什么位置。之前的知识我们可能会使用循环去读取这个文件的每一行并最终找到这个数字所在的位置,此类方法可以达到目的,但是消耗了很多不必要的时间和资源。
这个其实也都想到了就是算法,上面的问题思路是这样的,我们首先把这个文件中数据的中间值取出来,让用户需要查找的数据这个这个中间值做比对,如果用户输入的数字大于这个中间值,那么我就往后找,再取一次这个中间值,再做比较,这样以此类推直到找到这个数字,并取出这个数字所在的位置即可。
#二分查找算法: #版本1: l = [2,4,5,6,8,13,22,24,44,56,66,67,68,88,89,90,99] def find(l,tag): #tag是用户输入要查找大数字 half_tag = len(l)//2 #取一半的下标,此处要使用整除,防止除不尽的情况 #假如中间值是44 if l[half_tag] < tag: #用取一半列表再去哥用户要找的数字比对 num_l = l[half_tag+1 :] #如果用户输入的数字大于一半的下标,那么就从44后面找,这个位置要加1,是因为44在大于的时候已经比对过了,要从56开始比对 #num_l = l[half_tag+1 :] #把上面切掉的一半数据赋予新的变量名。 find(num_l,tag) #从上面新变量里面再去找,用户输入的是不是大于或者小于列表,一直重复下去,直到找到数字取到下标 elif l[half_tag] > tag: num_l = l[:half_tag] #如果小于,就从24往前找,这个时候就不用加1,这个是切片的顾头不顾尾的原则 #half_tag = len(num_l)//2 find(num_l,tag) else: print('找到了!',half_tag,l[half_tag]) #最后一种情况就是找到了,那就直接打印即可。 find(l,66)