在具有n个元素的序列中进行查找,平均查找长度为O(n)的方法?

        最近临近考试周,刷数据结构试题的时候遇到这么一道题:

        刚看到这道题的时候,因为有个显眼的“O(n)”首先就想到的就是“顺序查找方法” ,但是转念一想,题干中问的是“平均查找长度”,这时就来了疑惑。顺序查找的时间复杂度是O(n)这是毋庸置疑的,但是它的平均查找长度却好像不是这样,又突然想到“时间复杂度和平均查找长度的区别”这个问题,简简单单的问题好像变得复杂起来。

        带着这些问题,我去翻阅了老师的课件,去百度了一系列的问题。

        首先来看平均查找长度的定义:

 

        再看看时间复杂的的定义: 

        根据定义可以看到,时间复杂度和平均查找长度是两个不同的概念,而时间复杂度的表示方法一般使用使用大O的渐进表示法表示,平均查找长度却没有渐进表示这个说法。也可以顾名思义平均查找长度就是每中情况的平均值,他并不能使用大O的渐进表示法表示。大O的渐进表示法表示的是一个量级。

        我试图找到这个问题不同的答案,带着原问题找答案,果不其然都是清一色的“顺序查找方法”,然后我又试图百度:

“平均查找长度为N的方法”

和老师的课件描述一样,设每个数据元素的查找概率相等,查找成功时:

        顺序查找的平均查找长度为:(n+1)/2次,

查找不成功时:

        关键字的比较次数总是n+1次。

        写到这我也不知道怎么往下写了,或者可以换个角度来看这个问题:

        首先看“散列查找方法”这个选项。哈希函数查找成功的平均查找长度是指查找到哈希表中已有关键字的平均探测次数。而查找不成功的平均查找长度是指在哈希表中找不到待查的元素,最后找到空位置元素的探测次数平均值。

        分块查找方法:

                索引顺序查找是由索引表查找子表顺序查找两部分完成的,即ASL(索引顺序查找)ASL(索引表查找)ASL(顺序查找)。

                假设序列分成了n块,每块k个元素,那么ASL = LB + LA
                那么ASL = (1+n)/2 + (1+k)/2

        树形查找方法:在二叉排序树上进行查找的平均查找长度和二叉树的形态有关。

                在最坏情况下:二叉排序树是通过一个有序表的n个结点依次插入生成的,此时所得的二叉排序树蜕化为一颗深度为n的单支树,它的平均查找长度和单链表的顺序查找相同,也是(n+1)/2。

                在最好情况下:二叉排序树在生成过程中,树的形态比较均匀,其最终得到的是一颗形态与二分查找的判定树相似的二叉排序树

        再不深究这这几种不同的方法的平均查找长度,也能得出结论“他们的平均查找皆不可能为N,也更不可能为O(n)”。更接近正确答案的选项似乎只有“顺序查找方法”。

        而我更觉得这个题出的不严谨...

以上皆为本人主观见解,欢迎指出文章中不严谨的错误。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值