题目意思应该是无序的顺序表 平均查找长度为n+1(有序表并不是)
是因为在表中尾部(或头部)加入了一个昌蔽辅助的符合查找条件的“哨兵”,然后从新表的另一头开始查找,此时新表长为n+1。 “哨兵”的关键字是符合查找条件的,故在新表中一定会查找成功雹迅仿,查找成功时返回它在表中的位置。原表长度为n,下标范围为0到n-1,如果查找到返回的值为n(头部时为源纤0),即原表中查找失败。此时与新表中的所有元素都比较过,故为n+1。加入“哨兵”的好处是不需要再考虑判断数组越界的问题,如果不加入“哨兵”,还需考虑数组下标越界问题,比较次数更多。
不失一般性,假定链表无头节点,从第一节点开始查找(从尾节点开始查找也一样).(有头节点则从第二节点开始,不影响结果).
由于计算平均查找长度是以最坏可能性考虑,故从第一个节点开始比较到尾节点,需要比较n次,查找长度n;从第二笑培个节点开始比较到尾节点,需要比较n-1次,查找长度n-1;.,最后一个节点比较1次,查找长度1.
总长数=n+(n-1)+...+2+1=n(n+1)/迅升蚂2
查找不成功时平均查找长亩埋度=(n(n+1)/2)* (1/(n+1))=n/2
具体算的过程类似查找成功时平均查找长度(ASL=(n+1)/2).从宏观来讲,两种平均查找长度时间复杂度一样,微观来讲,找不到的比找到的平均查找长度小,找不到的可能性更大.这也是二分法优化的时候先判断找不到最后才判断找到的,但实际上好多教材二分法都是先判断找到才判断找不到.
都对哈,n是并携橘没有哨兵的情况,n+1是有哨兵的情况,根据ASL的定义是查找某个绝团数的总的比较次数*查找某数的概率,而查找失败是针对某一个元素而言,所隐逗以ASL = n * (1/1)或者ASL = n * (1/1)
应该是n+1
这是谁交给你的