第七章学习笔记

查找:

  基本概念:

    查找:

      1.静态查找(查找过程中不改变原本的数据)

      2.动态查找(查找过程中对原来的数据进行改动)

    关键字:

      数据元素(或记录)中某个数据项的值

    平均查找长度ASL(Average Search Length):

 

      ASL = Σni=1 pci

      其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同。

      Pi=1/n,Ci是找到第i个元素的比较次数。

  线性表查找:

    1.顺序查找:

      基础顺序查找:

        从头遍历直到找到目标关键字或到表尾

        时间复杂度:O(n);

        ASL = (1+2+...+n)/ n = (n+1)/ 2

      监视哨顺序查找:

        将0号位的值设置成目标关键字作为监视哨

        从后往前遍历遍历直到找到目标关键字或监视哨

        时间复杂度:O(n);

        ASL = (1+2+...+n)/ n = (n+1)/ 2

    2.二分查找(适用于有序表):

      基础二分查找:

        将low和high值分别设为表头表尾的序号(low = 1, high = lenth)

        将low和high中间的值与目标关键字比较

        根据比较情况调整low和high将搜索区域折半缩小

        当low>high时结束程序

        时间复杂度:O(log2n);

        ASL = log2(n + 1)-1

      递归二分查找:

        将low和high值分别设为表头表尾的序号(low = 1, high = lenth)

        将low和high中间的值与目标关键字比较

        根据比较情况递归查找左区域或右区域

        当low>high时结束程序

        时间复杂度:O(log2n);

        ASL = log2(n + 1)-1

 

    3.分块查找:

      适用于块内有序块间无序的表

      相当于将有序块分别当作有序表查找

  树表查找:

    1.二叉排序树:

      左子树所有结点值小于其根节点(或为空树)

      右子树所有结点值大于其根节点(或为空树)

    2.二叉平衡树:

      左右子树深度差不超过1

    3.多叉树:

      B树

      B+树

  散列查找:

    哈希表:

      散列函数:

        关键字经散列函数处理后的值作为该元素的散列地址

        一般散列函数使用除留余数法

        H(key) = key % m

      冲突:

        不同关键字的元素分配到同一散列地址的情况称为冲突

        解决方法:

          开放地址法:

            1.线性探测法:

              Hi = (H(key) + di) % m  di = 1, 2, 3, 4, ..., k(k ≤ m-1)

            2.二次探测法:

              Hi = (H(key) + di) % m  di = 12, -12, 22, -22, ..., k, -k2(k ≤ m/2)

 

 

            3.伪随机探测法

          链地址法

posted @ 2020-06-28 23:26  黄浚泓  阅读(161)  评论(0编辑  收藏  举报