资源简介 (共19张PPT)数据查找情景导入1打乱的扑克牌请在打乱的扑克牌中寻找出下面这张牌,讲一讲你寻找的方法查找(Search)又称检索,是计算机根据所给条件查找出满足条件的对象,即在存储的一批数据内寻找出一个特定的数据,或者确定在该批数据内是否存在这样的数据。查找的定义常用查找算法:顺序查找和对分查找顺序查找——算法思想算法思想顺序查找又称线性查找,从顺序表的一端开始,依次将每个元素的关键字与给定值key(查找键)进行比较。若某个元素的关键字等于key,则表明查找成功;若所有元素都比较完毕仍找不到,则表明查找失败。在不考虑扑克牌花色的情况下,仅在A到K,13张扑克牌中寻找指定的牌。扑克牌2~ 10 为数字本身,A 为 1 ,J 为 11 ,Q 为 12 ,K 为 13,变量Key存储要查找的牌。顺序查找——算法描述将代表13张扑克牌对应的数字存储于数组d中, 要查找的扑克牌对应数字储于变量key中。② 依次将d数组中元素与key进行比较。③ 若数组中某个数与key相等则查找成功并结束查找,若所有元素比较完毕仍找不到,则查找失败。枚举算法顺序查找——算法演示d[0] d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] d[9] d[10] d[11] d[12]11 12 13 4 10 6 7 8 9 5 1 2 3key=4①i=0,d[0]=11 !=key②i=1,d[1]=12 !=key③i=2,d[2]=13 !=key④i=3,d[3]=4 ==key→查找成功问题:若将上述问题规模扩大,在n张牌中寻找,则最理想情况是查找_______次?最差的情况需要查找________次?平均查找次数:________1n(n+1)/2顺序查找——程序实现For i in range(___________):If :________________else:________________0,n,1d[i]==keyprint(i)①遍历数组的索引。②如果找到,输出下标,结束查找。③若找不到,提示“没找到”breakprint(“没找到”)顺序查找——小结1.顺序查找本质上是一种__________思想,顺序查找程序就是用循环来枚举所有要查找的对象,然后在循环体内用条件判断当前枚举出的对象是否等于查找对象。2.当需要查找的数据规模为 n 时,顺序查找最少查找____ 次,最多查找_____次,其平均查找次数是________。3.顺序查找最大的优点是查找的数据可以是乱序的,但是其缺点是查找效率太低。顺序查找将待查找的数值与序列中的数逐个进行比较,直到找出与给定数值相同的数为止,其时间复杂度为_____ 。枚举算法1n(1+n)/2O(n)新打开的扑克牌请在新打开的扑克牌中寻找出下面这张牌,讲一讲你寻找的方法情景导入2对分查找——算法思想算法思想首先将查找的数与有序数组内处于中间位置的数据比较,如果中间位置上的数与查找的数不同,则根据数组的有序性,确定应该在数组的前半部分还是后半部分继续查找。在新确定的范围内,继续按上述方法,直到获得最终结果。对分查找——算法描述将13张扑克牌对应的数字(升序)存储于数组d中, 要查找的扑克牌对应数字储于变量key中。② 依次将d数组查找区间中间位置的数mid与key进行比较。③ 若mid与key相等则查找成功,结束查找,若key大于mid下一次查找区间为右半部分,反之为左半部分。重复②③两个步骤直到区间元素个数为零,即查找失败。在不考虑扑克牌花色的情况下,仅在A到K,13张升序排列的扑克牌中寻找指定的牌。扑克牌2~ 10 为数字本身,A 为 1 ,J 为 11 ,Q 为 12 ,K 为 13,变量Key存储要查找的牌。对分查找——算法演示d[0]d[1]d[2]d[3]d[4]d[5]d[6]....d[12]←i←j←mid第1次查找:范围为__________,i=________,j=_____,mid=___________。d[mid]=__________。d[mid]_____key=5?:后续查找的范围应该是_______________。d[0]~d[12]012(0+12)//2=6d[6]=7>d[0]~d[5]1234567...13i:查找数组的起点索引值;j:查找数组的终点索引值;mid=(i+j)//2,查找数组的中间位置的索引值。对分查找——算法演示d[0]d[1]d[2]d[3]d[4]d[5]←i←j←mid第2次查找:范围为__________,i=________,j=_____,mid=___________。d[mid]=__________。d[mid]_____key=5?:后续查找的范围应该是_______________。d[0]~d[5]05(0+5)//2=2d[2]=3<d[3]~d[5]123456对分查找——算法演示d[3]d[4]d[5]←j←mid第3次查找:范围为__________,i=________,j=_____,mid=___________。d[mid]=__________。d[mid]_____key=5?查找成功,结束查找。d[3]~d[5]35(3+5)//2=4d[4]=5==456←i对分查找——流程图描述开始i=0,j=12d[mid]=key d[mid]查找成功查找失败结束YNYNYNmidi<=j=(i+j)//2i=mid+1j=mid-1对分查找——程序实现key=int(input());f=False;i=0 #所有数据(升序)存储在数组d中j=while :mid=if d[mid]==key:f=Truebreakif d[mid]>key:else:if f==True:print("查找成功!下标为"+str(mid))else:print("没有找到!")i<=j(i+j)//2j=mid-1i=mid+1①给i,j赋初值②当i<=j时表示区间内元素个数不为零,重复执行查找工作③计算查找区间中间位置mid④判断中值是否就是查找键key⑤如果中值不是查找键,则判定下一个查找范围应该在左半部分还是在右半部分。注意i和j的控制。⑥输出查找结果:f=True,mid中存储的即为查找键Key在数组 d中的位置,f=False表示查找键key在数组d中不存在。len(d)-1对分查找——二叉排序树73154621089121113二叉排序树:①若左子树不为空,则左子树的值均小于它的根节点的值.②若右子树不为空,则右子树的值均大于它的根节点的值③它的左右子树也分别为二叉排序树。13张扑克牌使用对分查找过程我们可以用一棵二叉树来表示。假设对分查找数据规模为n最多查找次数?最多查找次数为二叉数高度:int(log2n)+1。查找算法小结查找算法 顺序查找 对分查找优点 ①算法简单,对数据是否有序没有要求。 ②查找效率高,适用于大数据查找。缺点 ②查找效率较低,当数据量大时不宜使用。 ①要求被查找数据必须有序。查找次数 一般情况是,当需要查找的数据规模为 n 时,顺序查找最少查找____次,最多查找____次,其平均查找次数是________。 当需要查找的数据规模为 n 时,最少查找 次,最多进行_____________次查找。算法思想 顺序查找本质上是一种_______算法思想。 对分查找思想符合_______算法的思想。1n(n+1)/2int(log2n)+1枚举递归1查找的定义。课堂小结顺序查找算法思想、程序实现。对分查找算法思想、程序实现。顺序查找与对分查找算法的优缺点。 展开更多...... 收起↑ 资源预览