第13周 查找

查找的基本概念
列表:由同一类型的数据元素(或记录)构成的集合,可利用任意数据结构实现。

关键字:数据元素的某个数据项的值,用它可以标识列表中的一个或一组数据元素。

  • 关键字:惟一标识列表中的一个数据元素
  • 关键字:不是主关键字,就为次关键字
  • 当数据元素仅有一个数据项时,数据元素的值就是关键字
查找:根据给定的关键字值,在特定的列表中确定一个其关键字与给定值相同的数据元素,并返回该数据元素在列表中的位置。
  • 静态查找:在查找过程中只是对数据元素进行查找
  • 动态查找:在实现查找的同时,插入找不到的元素,或从查找表中删除已查到的某个元素。
平均查找长度(ASL):为确定数据元素在列表中的位置,需和给定值进行比较的关键字个数的期望值,称为查找算法在查找成功时的平均查找长度。

查找的基本方法

1. 比较式查找法 —— (1)基于线性表的查找 (2)基于树的查找法

2. 计算式查找法 —— HASH(哈希)查找法

基于线性表的查找法 —— 顺序查找法;折半查找法

顺序查找法

若列表长度为 n,查找从最后一个元素开始找起,查找每个数据元素的概率相等,

则顺序查找算法的平均查找长度为:ASL=(n + 1)/ 2  (从首元素开始同样)

若查找第 i 个元素,需进行(n - i + 1)次比较。

折半查找法

前提条件:

  • 必须采用顺序储存结构
  • 必须按关键字大小有序排列

基于树的查找法 —— 二叉排序树;平衡二叉树

二叉排序树

  • 若它的左子树非空,则左子树上所有结点的值均小于它的根结点的值;

  • 若它的右子树非空,则右子树上所有结点的值均大于(或大于等于)它的根结点的值;
  • 它的左、右子树也分别为二叉排序树

插入:

  • 若二叉树是空树,则 S 成为二叉排序树的根;

  • 若二叉树非空,则将 S.key 与二叉排序树根结点的关键字进行比较:

                      if(key的值等于根结点的值),则停止插入;

                   else if(key的值小于根结点的值), 则将S插入左子树;

                   else if(key的值大于根结点的值), 则将S插入右子树。

查找:

首先将待查关键字 key 与根结点关键字 t 进行比较,如果:
  • key=t: 则返回根结点地址;

  • key<t: 则进一步查左子树;

  • key>t: 则进一步查右子树。

平衡二叉排序树

  • 左子树与右子树的深度之差的绝对值小于等于1

  • 左子树和右子树也是平衡二叉排序树;

原文地址:https://www.cnblogs.com/lin2001/p/13025885.html