第9章查找习题练习答案1
对含有n个互不相同元素的集合,同时找最大元和最小元至少需进行多少次比较
答:设变量max和min用于存放最大元和最小元(的位置),第一次取两个元素进行比较,大的放入max,小的放入min
从第2次开始,每次取一个元素先和max比较,如果大于max则以它替换max,并结束本次比较;若小于max则再与min相比较,在最好的情况下,一路比较下去都不用和min相比较,所以这种情况下,至少要进行n-1次比较就能找到最大元和最小元
若对具有n个元素的有序的顺序表和无序的顺序表分别进行顺序查找,试在下述两种情况下分别讨论两者在等概率时的平均查找长度:(1)查找不成功,即表中无关键字等于给定值K的记录;(2)查找成功,即表中有关键字等于给定值K的记录
答:查找不成功时,需进行n+1次比较才能确定查找失败
因此平均查找长度为n+1,这时有序表和无序表是一样的
查找成功时,平均查找长度为(n+1)/2,有序表和无序表也是一样的
因为顺序查找与表的初始序列状态无关
画出对长度为18的有序的顺序表进行二分查找的判定树,并指出在等概率时查找成功的平均查找长度,以及查找失败时所需的最多的关键字比较次数
答:等概率情况下,查找成功的平均查找长度为:ASL=(1+2*2+3*4+4*8+5*3)/18=3
556查找失败时,最多的关键字比较次树不超过判定树的深度,此处为5
为什么有序的单链表不能进行折半查找
答:因为链表无法进行随机访问,如果要访问链表的中间结点,就必须先从头结点开始进行依次访问,这就要浪费很多时间,还不如进行顺序查找,而且,用链存储结构将无法判定二分的过程是否结束,因此无法用链表实现二分查找
设有序表为(a,b,c,e,f,g,i,j,k,p,q),请分别画出对给定值b,g和n进行折半查找的过程
解:(1)查找b的过程如下(其中方括号表示当前查找