zoukankan      html  css  js  c++  java
  • 第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

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

  • 相关阅读:
    5.19 省选模拟赛 T1 小B的棋盘 双指针 性质
    5.15 省选模拟赛 容斥 生成函数 dp
    5.15 省选模拟赛 T1 点分治 FFT
    5.15 牛客挑战赛40 B 小V的序列 关于随机均摊分析 二进制
    luogu P4929 【模板】舞蹈链 DLX
    CF 878E Numbers on the blackboard 并查集 离线 贪心
    5.10 省选模拟赛 拍卖 博弈 dp
    5.12 省选模拟赛 T2 贪心 dp 搜索 差分
    5.10 省选模拟赛 tree 树形dp 逆元
    luogu P6088 [JSOI2015]字符串树 可持久化trie 线段树合并 树链剖分 trie树
  • 原文地址:https://www.cnblogs.com/lin2001/p/13025885.html
Copyright © 2011-2022 走看看