• 符号表实现(Symbol Table Implementations)


    符号表的实现有很多方式,下面介绍其中的几种。

    乱序(未排序)数组实现

    这种情况,不需要改变数组,操作就在这个数组上执行。在最坏的情况下插入,搜索,删除时间复杂度为O(n)。

    有序(已排序)数组实现

    这种情况我们就有了排序好的关键字和相应的值。

    通过关键字在数组中存储

    keys[i]为第i位大的key(关键字)

    values[i]就是第i位大key对应的值

    由于元素是按顺序存储在数组中的,找某个元素就可以用简单的二分搜索。最差的情况,搜索时间复杂度为O(log n),插入和删除时间复杂度为O(n)。

    乱序的链表实现

    只需要有两个元素的链表就行了。搜索,插入,删除的时间复杂度都是O(n)。

    有序链表实现

    这种方式下,当我们插入元素时,要保持原素的关键字为有序的(比如大小顺序)。即使链表已经排序好了,最坏情况下的插入,删除,搜索操作时间都要O(n)。

    其它一些实现方法:

    二叉树实现

    平衡二叉树实现

    三元搜索实现

    散列表实现

    各种符号表实现方式的比较

    Implementation Search Insert Delete
    Unordered array n n n
    Ordered Array log n n n
    Unordered List n n n
    Ordered List n n n
    Binary Search Trees (O(log n) on average) log n log n log n
    Balanced Binary Search Tree log n log n log n
    Ternary Search log n log n log n
    Hashing (O(1) on average 1 1 1
  • 相关阅读:
    lookup:ID列
    分享几篇文章
    怎样无限制使用smartgit ?
    C++ Win32控制台应用程序捕捉关闭事件
    mt4 在K线上 放文字
    变色指标
    用windows 打包 证书
    监管fca asic nfa 啥啥啥
    sublime 3 build 3126 code ,压缩包在我的360企业云盘里,搜sublime
    个人作业收官——软件工程实践总结
  • 原文地址:https://www.cnblogs.com/programnote/p/4729455.html
Copyright © 2020-2023  润新知