zoukankan      html  css  js  c++  java
  • 符号表实现(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
  • 相关阅读:
    hdu 1686 Oulipo
    [NOI1997] 积木游戏
    错误录——未完待续
    NOI 2014 魔法森林
    hdu 4010 Query on The Trees
    求助大佬6——1种贪心
    51 nod 1205 流水线调度
    bzoj 1180: [CROATIAN2009]OTOCI
    HNOI2010 弹飞绵羊
    SDOI2008 洞穴勘测
  • 原文地址:https://www.cnblogs.com/programnote/p/4729455.html
Copyright © 2011-2022 走看看