zoukankan      html  css  js  c++  java
  • 静态查找表和动态查找表

    静态查找表:

    1.顺序查找表:从线性表一端开始扫描,将扫到的关键字与给定值比较,相同则查找成功

    2.有序表查找:若线性表有序,则可以折半查找。折半查找升级版为插值查找,及不取1/2处。斐波那契查找,也是折半查找的变种

    3.索引顺序表查找:效率介于1)2)之间。又称分块查找。块与块之间有序,块内无序。实际进行两次查找,第一次折半查找,第二次顺序查找

    动态查找表:相比于静态查找表,查找过程中会修改元素

    1.构造查找树:

      二叉查找树:

      1)若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

      2)若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

      3)任意节点的左、右子树也分别为二叉查找树。

      4)没有键值相等的结点

      23树:二叉查找树的升级版:往三结点插入元素需要将三节点裂成二结点

      红黑树:是23树的简化版,红链链接3node黑链链接2node,查找方法同一般二叉查找树

      b树:堆23树的进一步升级

        m阶B树的定义如下:

        1. 根节点至少包括两个孩子;

        2. 树中每个节点最多含有m个孩子(m>=2);

        3. 除根节点和叶节点外,其他每个节点至少有ceil(m/2)个孩子(ceil()为向上取整);

        4. 所有叶子节点都位于同一层;

        5. 每个非叶节点包括n个关键字信息,其中ceil(m/2)-1<=n<=m-1。

      b+树:与b树相比主要区别在于只有叶结点存放信息,非叶结点只起索引作用。所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历

        B+ 树的优点在于:

        1.由于B+树在内部节点上不好含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子几点上关联的数据也具有更好的缓存命中率。

        2.B+树的叶子结点都是相链的,因此对整棵树的遍历只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元

        素可能在内存中不相邻,所以缓存命中性没有B+树好。

        B树也有优点:由于B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。

    hash查找:

        构造哈希函数:  

        1)直接定址(整型)

        2)数字分析法

        3)平方取中法

        4)取余法

        5)折叠法:将关键字分块折叠 

        6)减去法:关键字减特定变量

        7)基数转化法:关键字变为其他进制

        8)伪随机数法:用伪随机函数

        冲突的处理:

        1)开放地址法:

        线性探测法:若重复,在哈希表中遍历空缺位置并插入。缺点:①会堆聚,即冲突比较频繁的话哈希表就会乱②如果删除元素会导致计算机以为一定找不到对应元素③处理溢出不方便

        线性补偿探测法:线性探测法的改进,遍历时步长不选一,选为n

        伪随机探测:另一种改进方法,步长由伪随机函数确定

        2)链地址法:

        

        3)再哈希法:有冲突时再哈希一次,一直到无冲突

        4)建立公共溢出区:将所有有冲突的放在哈希表外,为其建立公共溢出区

  • 相关阅读:
    3.2 playbook tags
    3.1 playbook语法实践
    3. playbook基础组件
    elasticsearch IK中文分词
    elasticsearch参数详解
    2. ansible常用模块
    1. ansible简介
    Python sphinx-build在Windows系统中生成Html文档
    Oracle PL/SQL Developer集成TFS进行团队脚本文件版本管理
    Gulp自动构建Web前端程序
  • 原文地址:https://www.cnblogs.com/psymacome/p/7987145.html
Copyright © 2011-2022 走看看