欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    典型查找算法编程.ppt

    • 资源ID:6092195       资源大小:230.99KB        全文页数:32页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    典型查找算法编程.ppt

    第8章 典型查找算法,顺序查找、折半查找和分块查找的方法和算法,相应的平均查找长度二叉排序树查找方法和算法,二叉平衡树概念散列表的概念,散列函数的构造方法,处理冲突的方法及散列表各种运算的实现算法,第8章 典型查找算法,8.1 实例:学生分配座位 8.2 静态查找 8.3 动态查找 8.4 散列查找 本章总结,8.1 实例:学生分配座位,8.1.1 问题描述 8.1.2 问题的分析 8.1.3 实现算法 8.1.4 基本概念,8.1.1 问题描述,教室中的学生座位分配是一个最简单的例子。假定某教室有35个座位,如果不加限定任意就坐或按某种规律就座,则要查找某学生时就要将待查找的学生与当前座位上的学生进行比较。,8.1.2 问题的分析,用计算机来解决查找学生问题,通常需要做以下工作:第一,学生信息以什么形式表示和存储;第二,查找的具体实现方法(算法)。,struct student int num1;/表示座号int num2;/表示学号char name12;/表示姓名;struct listStudent stusize;/保存学生记录Int len;/学生人数;,学生信息的存储方式:,从第一个学生开始,依次与查找的学生进行比较。在查找过程中,若某个学生的记录与所查找学生记录相等,则查找成功,返回该学生在表中位置;若全部比较完毕,没有符合条件的学生记录,则查找不成功,返回-1。,查找学生的方法:,8.1.3 实现算法,int search(List,8.1.4 基本概念,查找表:利用计算机查找时,首先要确定原始数据的逻辑结构和存储结构,变为计算机中处理的数据结构,这种数据结构称为存储表。查找:在一个含有众多数据元素(或记录)的查找表中找出某个“特定的”数据元素(或记录)。查找成功,返回该记录的存储位置;查找失败,返回一个特定值。平均查找长度:在查找成功情况下的平均比较次数。对于含有n个记录的表,查找成功时的平均查找长度为:ASL=其中:Ci为查找第i个元素时同给 定值K进行比较的次数;Pi为查找第i个记录的概率,且 在等概率情况下,则P1=P2=Pn=,8.2 静态查找,8.2.1 顺序查找 8.2.2 折半查找 8.2.3 分块查找,8.2 静态查找,查找过程中,进行如下操作:查询某个特定的数据元素是否在查找表中或检索某个数据元素的各种属性。此查找表称为静态查找表(Static Search Table)。查找表定义为顺序存储的线性表,数据类型定义如下:struct Elemtype/数据元素类型定义keytype key;/关键字项;#define maxlen maxsize/分配的存储单元个数struct ListSq Elemtype e maxsize;int len;,8.2.1 顺序查找,顺序查找(线性查找)基本思想:从线性表的一端开始,依次将每个元素的关键字同给定值K进行比较,若某元素关键字与K相等,则查找成功;若所有元素都比较完毕,仍找不到关键字为K的元素,则查找失败。实现算法:(略)ASL:等概率前提下,ASL=(n+1)/2;若查找失败,需要比较n+1次,所以时间复杂为O(n)。,8.2.2 折半查找,使用折半查找(二分查找)的前提:有序表形式表示。折半查找的思想:设存在顺序有序表ListSq L,表中元素的下界为0,上界为L.len-1。先取整个有序表的中间点元素L.emid(mid=((上界+下界)/2)的关键字同给定值K进行比较。若相等,则查找成功,返回该元素的下标mid;若KL.emid.key,则说明待查元素若存在只能在右子表(下标从mid+1到n1的范围)中,只要在右子表中继续二分查找即可。重复执行,直到找到关键字为K的元素或当前查找区间为空(即表明查找失败)为止。,实现算法:(略)二叉判定树:表示折半查找的查找过程。树中的每个结点表示表中一个元素,每棵子树的根结点表示当前查找区间的中间点元素,它的左子树和右子树分别对应该区间的左子表和右子表。二叉判定树是一棵二叉排序树。二分查找的平均查找长度为:,8.2.3 分块查找,分块查找(索引顺序查找)基本思想:首先把一个线性表(即主表)按照一定的函数关系或条件划分成若干个逻辑子表,为每个子表分别建立一个索引项,由所有子表的索引项构成一个索引表。当进行分块查找时,先根据所给的关键字查找索引表,从中查找出给定值K刚好小于等于索引值的那个索引项,找到待查块,然后再到主表中查找该块,从中查找待查的记录。实现算法:(略)索引表是有序的,所以在索引表上既可以采用顺序查找,也可以采用折半查找,而每个块中的记录排列是任意的,所以在块内只能采用顺序查找。,平均查找长度为:设将长度为n的表均匀分成b块,每块有s个记录,则b=n/s,查找表中每条记录的概率相等,则每块查找的概率为1/b,块中每条记录的查找概率为1/s。则顺序查找索引表时:,8.3 动态查找,8.3.1 二叉排序树查找 8.3.2 二叉平衡树 动态查找表特点:表结构本身是在查找过程中动态生成的,即对于给定值key,若表中存在关键字等于key的记录,则查找成功;否则插入关键字为key的元素。,8.3.1 二叉排序树查找,二叉排序树(二叉搜索树、二叉查找树):或者是一棵空树,或是一棵有如下特性的非空二叉树:l 若它的左子树非空,则左子树上所有结点的关键字均小于根结点的关键字。l若它的右子树非空,则右子树上所有结点的关键字均大于等于根结点的关键字。l 左、右子树本身又各是一棵二叉搜索树。结论:二叉排序树中序遍历得到的必是一个有序序列。,二叉排序树的查找过程(递归查找过程):查找一个给定值为k的结点,若二叉树不为空,首先将它与根结点进行比较,若K与根结点相等,查找成功;若K小于根结点,则表示若K存在,应在其左子树中;否则若K存在,应在其右子树中。对左、右子树同样按上述过程先与子树的根结点进行比较,根据比较的结果定下一步的操作。若在查找过程中遇到叶子结点,还没有找到待找结点,则表示二叉排序树中不存在该结点,查找不成功。实现算法:(略),时间复杂度:分析:在二叉排序树上进行查找的过程中,根结点为待查结点时,给定值同树中结点的比较次数仅为一次,待查结点位于最后一层时,比较的次数为树的深度。普通情况下,对二叉排序树进行查找的时间复杂度为O();最差情况下(二叉排序树为一棵单支树),其时间复杂度为O(n)。,8.3.2 二叉平衡树,二叉平衡树(AVL树):或者是一棵空树,或者是一棵具有如下性质的非空二叉树:它的左子树和右子树都是二叉平衡树,且左子树和右子树的深度之差的绝对值不大于1。二叉平衡树中结点的左子树的深度减去它的右子树的深度的值定义为平衡因子BF,则BF的值只可能为1、0和1。,对二叉排序树插入结点而构造平衡二叉树的规律:设最小子树根结点的指针为a,则失去平衡后进行调整的规律:LL型:单向右旋平衡处理 RR型:单向左旋平衡处理 LR型:双向旋转(先左后右)平衡处理 RL型:双向旋转(先右后左)平衡处理时间复杂度:在查找过程中和给定值进行比较的关键字的个数不超过树的深度,所以,在二叉平衡树上进行查找的时间复杂度为O(log2n)。,8.4 散列查找,8.4.1 散列存储和散列函数的构造方法 8.4.2 解决冲突的方法 8.4.3 散列查找实现算法和性能分析,8.4.1 散列存储和散列函数构造,基本术语:散列存储:以数据中每个元素的关键字K为自变量,通过一个函数f(k)计算出函数值,把这个值同存储空间中一个唯一的存储位置相对应,将该元素存储到这个存储位置中。函数f(k)称为散列函数或哈希函数。f(k)的值称为散列地址或哈希地址;进行散列存储的地址空间称为散列表或哈希表。冲突:实际应用中,由于散列函数的构造方法不同,常会出现多个元素同时占用一个存储单元的情况,即散列地址相同,这种现象叫冲突。具有相同函数值的不同关键字的元素,称为同义词。,常用的构造散列函数的方法:,直接定址法数字分析法平方取中法 折叠法 除留余数法,8.4.2 解决冲突的方法,常用的解决冲突的方法有以下几种:,开放定地址链地址法,从发生冲突的那个单元开始,按照一定次序,从散列表中查找出一个空闲存储单元,把发生冲突的待插入元素存入到该单元中的一类解决冲突的方法。设H(key)为散列函数,m为散列表长度。则开放定址法中找下一个空闲空间的散列函数为:Hi=(H(key)+di)%m 其中,i=1,2k;di称为增量,以di的取值分为以下三种:(1)di=1,2,3m-1,称线性探测再散列。(2)di=12,-12,22,-22,k2,(km/2)称二次探测再散列。(3)di=随机数序列,称为随机探测再散列。,开放定址法:,把具有相同散列地址的关键字放在同一链表中,称为同义词链表。通常把具有相同散列地址的关键字都存放在一个同义词链表中,有m个散列地址就有m个链表,同时用数组tm存放各个链表的头指针,凡是散列地址为i的记录都以结点方式插入到以ti为头指针的单链表中。,链地址法:,8.4.3 散列查找实现算法和性能分析,实现算法:(略)结论:l由于产生“冲突”,查找过程仍是一个给定值和关键字进行比较的过程。因此,仍需以平均查找长度作为衡量散列表的查找效率的量度。l 查找过程中比较个数取决于因素:散列函数、解决冲突的方法和散列表的装填因子。装填因子定义:=越小,发生冲突的可能性就越小;越大,发生冲突的可能性就越大。,本章总结,本章主要介绍了数据处理中的几种典型的查找方法、及实现算法和各种查找方法的性能分析。查找:指在一个含有众多数据元素(或记录)的查找表中找出某个“特定的”数据元素(或记录)。查找过程:是数据处理的一个环节,它的下一环节是对查找到的结果进行处理,根据所做的操作的不同,将查找方法分为静态查找和动态查找。静态查找方法介绍了顺序查找、二分查找和分块查找三种方法。动态查找方法介绍了二叉排序树查找和二叉平衡树查找。,顺序查找既适用于顺序表,也适用与单链表,时间复杂度是O(n),平均查找长度为(n+1)/2。折半查找只适用于顺序存储的有序表。折半查找的时间复杂度为O(log2n)。折半查找的查找过程可以画成一棵二叉判定树,它是一棵二叉排序树。分块查找过程分为两部分:先在索引表中查找;然后在主表的对应块中顺序查找。二叉排序树查找:根据二叉排序树的定义,首先访问根结点,若其值等于给定值则查找成功;若给定值比根结点大,继续向右子树中查找;否则给定值比根结点小,继续在左子树中查找,直到找到该结点或找不到为止,此时查找失败。,二叉平衡树的BF的值只可能为1、0和1。二叉平衡树的构造过程中进行调整的方法共有四种。二叉平衡树的查找过程也与二叉排序树类似,从根结点开始,向左或右子树进行查找。散列存储是一种存储方法,也是一种查找方法。散列存储通过对元素的关键字按给定函数进行计算,得到存储地址,此地址称为散列地址,用于计算地址的给定函数称为散列函数,用于存储元素的地址空间称为散列表。构造散列函数方法有直接定址法、数字分析法、平均取中法、折叠法和除留余数法。常用的解决冲突的方法有开放定址法、链地址法。平均查找长度等于查找每个元素时的比较次数之和除以所有元素的个数。,

    注意事项

    本文(典型查找算法编程.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开