数据结构--查找--知识点总结

数据结构–搜索–总结

    • 1.(基础要点) 查找的基本概念
    • 2.(基础要点) 顺序查找、二分查找、分块查找
      • 2.1 顺序查找
      • 2.2 二分查找
      • 2.3 分块查找
    • 3.(⭐⭐) 二叉排序树、平衡二叉树、伸展树、红黑树
      • 3.1 二叉搜索树
      • 3.2 平衡二叉树
      • 3.3 伸展树
      • 3.4 红黑树
    • 4.(⭐) B-树、B+树
      • 4.1 B树
      • 4.1 B+树
    • 5.(⭐⭐⭐) 散列(hash)
      • 5.1 确定散列函数
      • 5.2 解决冲突
    • 6.(⭐⭐⭐) 查找算法的分析及应用


1.(基础要点) 查找的基本概念

  • 查找:就是在数据集合中寻找满足某种条件的数据对象。
  • 关键码:在每个对象中有若干属性,其中有一个属性,其值可唯一地标识这个对象,称为关键码。
  • 静态搜索:搜索结构在插入和删除等操作的前后不发生改变。
  • 动态搜索:为保持高的搜索效率,搜索结构在执行插入和删除等操作的前后将自动进行调整,结构可能发生变化。
  • 静态:有序查找、折半查找、斐波那契搜索
  • 动态:有序查找、折半(跳表)、非线性-树

2.(基础要点) 顺序查找、二分查找、分块查找

2.1 顺序查找

2.2 二分查找

  • 基本思路:设R[low,high]是当前的查找区间,首先确定该区间的中间位置mid=(low+high)/2,然后将待查的k值与R[mid]比较,若相等,则查找成功,返回该位置。否则需要确定新的查找区间。若R[mid]>k,则新的查找区间为[low,…,mid-1],类似地,若R[mid]

2.3 分块查找

又称索引顺序查找。

3.(⭐⭐) 二叉排序树、平衡二叉树、伸展树、红黑树

3.1 二叉搜索树

  • 二叉搜索树(Binary Search Tree)定义:二叉搜索树或者是空树,或者是满足以下性质的二叉树:
    若它的左子树不空,则左子树上所有关键字的值均小于根关键字的值。
    若它的右子树不空,则右子树上所有关键字的值均大于根关键字的值。
    左右子树又各是一棵二叉排序树。
  • 二叉搜索树操作

    • 查找
    • 插入
    • 删除:叶子结点直接删除;右子树空用左子女顶替;左子树空用右子女顶替;左右子树都非空在右子树上找中序下第一个结点填补。
  • 二叉搜索树性能分析

3.2 平衡二叉树

  • 平衡二叉树(AVL树):一种特殊的二叉排序树,左右子树都是平衡二叉树,且左右子树高度之差的绝对值不超过1.
    (先发明的二叉排序树,实现了较高的查找效率。后来发现基于这种查找方法,树越矮查找效率越高)
  • 平衡因子:该结点右子树的高度减去左子树的高度所得的高度差,称为平衡因子。

  • AVL树操作

    • AVL树的平衡化(耐心搞清楚,一点都不难)
      数据结构--查找--知识点总结_第1张图片
    • AVL树的插入、删除
      数据结构--查找--知识点总结_第2张图片
      数据结构--查找--知识点总结_第3张图片
      数据结构--查找--知识点总结_第4张图片
      数据结构--查找--知识点总结_第5张图片
      数据结构--查找--知识点总结_第6张图片

3.3 伸展树

  • 伸展树(Splaying Tree)是另一种提高搜索效率的方法,主要考虑的因素是结点被访问的频率。其思路是:每当访问(搜索、插入、删除)一个结点s时,伸展树就执行一次“展开”,将结点s移到二叉搜索树的根部。

  • 伸展树操作:搜索

3.4 红黑树

  • 红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:
    节点是红色或黑色。
    根是黑色。
    所有叶子都是黑色(叶子是NIL节点)。
    每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
    从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。

  • 这些约束确保了红黑树的关键特性:从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。结果是这个树大致上是平衡的。

  • 红黑树相对于AVL树来说,牺牲了部分平衡性以换取插入/删除操作时少量的旋转操作,整体来说性能要优于AVL树。

4.(⭐) B-树、B+树

4.1 B树

  • B树基本概念
  • 数据结构--查找--知识点总结_第7张图片
    数据结构--查找--知识点总结_第8张图片
    数据结构--查找--知识点总结_第9张图片
  • B树基本操作
    数据结构--查找--知识点总结_第10张图片
    数据结构--查找--知识点总结_第11张图片

4.1 B+树

B+树是B-树的一种变形。
B+树和B-树的区别:
1)分支数:B+树n个关键字的结点有n个分支;B-树n个关键字的结点有n+1个分支。
2)关键字个数:
3)叶节点是否包含信息:B+树叶子结点包含信息
4)B+树中非叶子结点仅起一个索引的作用
5)。。

5.(⭐⭐⭐) 散列(hash)

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
举例:给定姓名(‘AAA’,’BBB’),转换成id(1,2)
根据给定的关键字来计算出关键字在表中的地址。
散列中最重要的两部分: 确定散列函数,以及解决冲突问题

5.1 确定散列函数

1.直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a·key + b,其中a和b为常数(这种散列函数叫做自身函数)
2. 数字分析法
3. 平方取中法
4. 折叠法
5. 随机数法
6. 除留余数法:取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即 H(key) = key MOD p,p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。

5.2 解决冲突

解决冲突:当一个元素要插入时,此前已有插入的元素散列,那么就会产生一个冲突,这个冲突必须要消除。解决冲突有两种方法:开放定址法、分离链接法
开放定址法(包含线性探測,平方探測,双散列等)
分离链接法:将散列到同一个值的全部元素保留到一个链表中

6.(⭐⭐⭐) 查找算法的分析及应用

你可能感兴趣的:(数据结构)