• 数据结构——查找


    1、查找的概念
    查找(或检索)是在给定信息集上寻找特定信息元素的过程。
    待查找的数据单位(或数据元素)称为记录。

    2、查找的定义及方法
    查找的定义:设记录表L=(R1 R2……Rn),其中Ri(l≤i≤n)为记录,对给定的某个值k,在表L中确定key=k的记录的过程,称为查找。若表L中存在一个记录Ri的key=k,记为Ri.key=k,则查找成功,返回该记录在表L中的序号i(或Ri 的地址),否则(查找失败)返回0(或空地址Null) 。
    查找的方法:查找方法很多,有顺序查找、折半查找、分块查找、树表查找及Hash表查找等等。查找算法的优劣将影响到计算机的使用效率,应根据应用场合选择相应的查找算法。

    3、顺序表查找
    所谓顺序表(Sequential Table),是将表中记录(R1 R2……Rn)按其序号存储于一维数组空间。其特点是相邻记录的物理位置也是相邻的。
    顺序表查找特点:可以对无序记录表查找,但是效率是最低的,查找某记录几乎要扫描整个表,当表长n很大时,会令人无法忍受。

    4、折半查找
    当记录的key按关系≤或≥有序时,则对给定值k,逐步确定待查记录所在区间,每次将搜索空间减少一半(折半),直到查找成功或失败为止。
    算法思想:设两个指针(或游标)low、high,分别指向当前待查找表的上界(表头)和下界(表尾)。对于表(R1 R2……Rn),初始时low=0、high=n-1,令:mid=mid=((low+high)/2)指向当前待查找表中间的那个记录。
    折半查找特点:只能对有序记录表查找,效率相对较高。

    5、Hash表查找
    a、Hash表的含义:
    Hash表,又称散列表、杂凑表。
    理想的查找方法是:对给定的k,不经任何比较便能获取所需的记录,其查找的时间复杂度为常数级O(C)。这就要求在建立记录表的时候,确定记录的key与其存储地址之间的关系f,即使key与记录的存放地址H相对应,或者说,记录按key存放。之后,当要查找key=k的记录时,通过关系f就可得到相应记录的地址而获取记录,从而免去了key的比较过程。这个关系f就是所谓的Hash函数(或称散列函数、杂凑函数),记为H(key)。它实际上是一个地址映象函数,其自变量为记录的key,函数值为记录的存储地址(或称Hash地址)。另外,不同的key可能得到同一个Hash地址,即当keyl≠key2时,可能有H(key1)=H(key2),此时称key1和key2为同义词。这种现象称为“冲突”或“碰撞”,因为一个数据单位只可存放一条记录。一般,选取Hash函数只能做到使冲突尽可能少,却不能完全避免。这就要求在出现冲突之后,寻求适当的方法来解决冲突记录的存放问题。
    综上所述,对Hash表的含义描述为:根据选取的Hash函数H(key)和处理冲突的方法,将一组记录(R1 R2……Rn)映象到记录的存储空间,所得到的记录表称为Hash表,如图:

    image

    关于Hash表的讨论关键是两个问题,一是选取Hash函数的方法;二是确定解决冲突的方法。
      选取(或构造)Hash函数的方法很多,原则是尽可能将记录均匀分布,以减少冲突现象的发生。
    几种常用的构造方法:直接地址法,数字分析法,平方取中法,叠加法,保留除数法,随机函数法
    处理冲突的方法:开放地址法,链地址法
    b、Hash表的查找及分析
    Hash表的查找特点是:怎么构造的表就怎么查找,即造表与查找过程统一。
    算法思路:对给定k,根据造表时选取的H(key)求H(k)。若H(k)单元=^,则查找失败,否则k与该单元存放的key比较,若相等,则查找成功;若不等,则根据设定的处理冲突方法,找下一地址Hi,直到查找到或等于空为止。

  • 相关阅读:
    机器学习 深度学习 网站
    Concat层解析
    网络可视化工具netron详细安装流程
    【中文】【deplearning.ai】【吴恩达课后作业目录】
    python 3 linux环境搭建django production环境
    eCharts画图
    mysql 外键
    django执行离线ORM、数据操作
    http 发包调试工具
    python有空仔细研究
  • 原文地址:https://www.cnblogs.com/sanwumanzi/p/10561124.html
Copyright © 2020-2023  润新知