美文网首页数据结构和算法分析
第三章 查找 3.1 符号表 (ST)

第三章 查找 3.1 符号表 (ST)

作者: 浩林Leon | 来源:发表于2018-04-07 20:55 被阅读3次
    3.1.0用例举例:

    1.一个用来跟踪算法在小规模的输入下的行为测试用例:
    类似hashMap,输入的相同的key,新值会代替旧值.例如:使用”S E A R C H E X A M P L E ” 按照约定,我们将S→0 R→3 ,但是E→ 12 (不是1 或者6 因为最后的E值已经更新为12),最后按顺序输出字母以及对应的值.
    2.一个用来寻找更高效的实现性能测试用例.
    记录一系列的输入字符串,并记录出现的次数,然后遍历所有键找出出现频率最高的键.

    3.1.1符号表所需要具备的共性:

    1.混合使用查找和插入的操作
    2.大量不同的键
    3.查找操作比插入操作多得多
    4.虽然不可预测,但是查找和插入的操作使用模式并不是随机

    3.1.2无序链表中的顺序查找,(基于链表)
    image.png
    命题A:

    在含有N对键值的无需链表中,未命中的查找和插入都需要N次比较,命中的查找在最坏情况下也需要N次比较.向一个空表中插入N个键值对需要n(n-1)/2 ( ~N^2/2) 次比较.

    推论:

    向一个空表中插入N个不同的键需要~N^2/2次比较.
    这些分析证明,基于链表的存储和查找的效率是非常低的,无法满足FrequencyCounter的处理庞大的输入问题需求.

    3.1.3 有序数组的二分查找

    对二分查找的分析:

    命题B:

    在N个键有序的数组中进行二分法查找,最多需要lgN+1次比较,无论成功失败.

    尽管二分法查找时间是对数级别,但是put方法还是太慢了,需要单次插入一个键时间复杂度需要N,向一个空符号表中插入2N(小于需要插到前面,还需要比较和后一个键的大小 所以需要比较2次 N个需要x2)个键最坏情况下需要访问N2次数组.所以还是不能使用在数据庞大的操作.

    一般情况下二分查找比顺序查找要快的多,他也是在众多实际应用中使用的最佳选择.

    相关文章

      网友评论

        本文标题:第三章 查找 3.1 符号表 (ST)

        本文链接:https://www.haomeiwen.com/subject/sdcuhftx.html