您好,欢迎访问三七文档
**有一个数在1~100之间,请大家用最少的次数来猜出这个数。你会先猜几?*如果我告诉你这个数是15,按照刚才的逻辑,几次可以猜到这个数呢?*在刚才的沟通中,其实隐藏着一个非常经典的算法—对分查找**(1)对分查找是效率很高的查找方法,但被查找的数据必须是有序的。*(2)首先将查找的数与有序数组内处于中间位置的数据比较,如果中间位置上的数与查找的数不同,根据有序性,就可确定应该在数组的前半部分还是后半部分继续查找。*(3)在新确定的范围内,继续按上述方法进行查找,直到获得最终结果。*思考两个问题:①d(mid)key时,新查找的范围为下半部分,i和j的变化规律是怎样的?②如果要找的是52,最后i、j、mid分别是多少?*思考:当d(mid)key时,新查找的范围在哪里?i和j如何变化?总结:如果d(mid)key,新查找范围为上半部分,i值不变,j=mid-1。*总结:①找到了查找会结束。②在i=j时重复查找,如果还是找不到,查找也会结束。***(1)key与d(mid)的大小比较影响i、j取值的规律:*i的取值规律:如果d(mid)key,那么i=mid+1。*j的取值规律:如果d(mid)key,那么j=mid-1。*(2)继续进行重复查找的条件:i≤j。**对于规模为n的数组进行对分查找,无论是否找到,最多进行log2𝑁+1次查找,log2𝑁表示小于等于log2𝑁的最大整数。*log2𝑁相当于INT(log2𝑁)对于有5000个元素的数组,使用对分查找,最多要查问多少个数据?使用顺序查找呢?试比较两种查找算法的效率。最多查找次数:对分查找:log25000+1=int(log25000)+1
本文标题:对分查找算法
链接地址:https://www.777doc.com/doc-6299003 .html