zoukankan      html  css  js  c++  java
  • 数据结构——第七章 查找

    查找的目的是从给定的同一类型的数据集合中,找出人们所需要的数据元素(或记录)/

    基本术语:

    记录(record)

    关键字(keyword)

    主关键字(Primarykey)

    次关键字(Secondary Key)

    查找表(Searching Table)

    动态查找(Dynamic Searching)

    静态查找(Static Searching)

    内部排序(Internal Sorting)

    外部排序(External Sorting)

    稳定性(Stability)

    1 静态查找

    一、顺序查找

    顺序查找是用待查找记录与查找表中的记录逐个比较,若找到相等记录,则查找成功,否则,查找失败。

    二、折半查找(二分查找)

    折半查找的前提是表有序的而且是顺序存储

    使用三个指针low mid和high。

    二分查找的性能分析

    为了分析二分查找的性能,可以用二叉树来描述二分查找的过程。

    把当前查找区间的中点作为根节点,左子区和右子区间分别作为根的左子树和右子树,

    左子区间和右子区间按类似的方法,由此得到的二叉树成为二分查找的判定树。

    ASL是平均查找长度(或说平均比较次数)

     2 动态查找

    在查找表中实施查找时,对于给定值key,若表中存在关键字段等于key的记录,则查找成功。

    否则将带查找记录按规则插入查找表中。

    下面我们介绍几种动态查找方法。

    一、二叉排序树查找:前提是将查找表组织为一颗二叉排序树。

    二叉排序树。它或是一颗空树,或是一颗具有如下特征的非空二叉树。

    (1)若他的左子树非空,则左子树上所有结点的关键字均小于根节点的关键字。

    (2)若他的右子树非空,则右子树上所有结点的关键字均大于等于根节点的关键字;

    (3)左、右子树本身又都是一颗二叉排序树。

    首先要构造二叉排序树,给定一组顺序。。然后开始构造。

    二叉排序树的效率高于顺序但低于二分。

    后来发明了平衡二叉树,让树变矮一些,效率高了一些。。

     构造过程:

    求每一个结点的平衡因子,所有结点的平衡银子为0,1,-1时,为平衡二叉树

    平衡因子: 左子树高度减右子树高度 

    (1)LL型 

    左 -> 左

     旋转

    (2)LR型

     

    左 -> 右

    先变成LL 然后旋转

     (3)RR型

    右->右

    (4)RL型

    边建边调整。

    3 hash查找(其实可以看成是一种动态查找)

     介绍一种不通过大量无效的比较,就能直接找到待查关键字的位置的查找方法

    基本术语:

    1.hash方法:

    在存放记录时,通过相同函数计算存储位置,并按此位置存放,这种方法成为hash方法。

    2.hash函数:

    指在hash方法中使用的函数。

    3.hash表:

    按hash方法构造出来的表称为hash表。

    4.hash地址:

    通过hash函数计算记录的存储位置,我们把这个存储位置称为Hash地址。

    5.冲突:

    不同记录的关键字经过Hash函数计算可能得到同一hash地址,即key1!=key2时,

    H(key1)=H(key2)。这种现象叫做“冲突”。

    对于hash方法需要讨论三个问题:

    (1)装满因子

    (2)对于给定的一个关键字集合,选择一个计算简单且地址分布比较均匀的Hash函数,避免或尽量减少冲突。

    (3)拟订解决冲突的方案。

    构造hash函数的常用方法:

    (1)直接定址法(重点)

    Hash(key) = a*key + b

    (2)数字分析法

    (3)除留取余法(重点)

    处理冲突的方法:

    1.开放地址法

    ///待更新。。

  • 相关阅读:
    Spring Richclient — 企业级富客户端开发框架介绍,第 1 部分
    oracle的表名、字段名、constraint名的长度限制分别是多少?
    eclipse指定启动的jdk
    女人为什么爱攀比?
    Oracle一些常用的查询命令总结(持续更新)
    js冒泡事件之之之
    Aspose插件
    oracle11g导入到10g
    转:OpenCms 9.0.1汉化
    metasploit常用命令
  • 原文地址:https://www.cnblogs.com/eret9616/p/8367042.html
Copyright © 2011-2022 走看看