C语言博客作业05--查找

   日期:2024-12-26    作者:b1234476 移动:http://mip.riyuangf.com/mobile/quote/54587.html

| 这个作业属于哪个班级 | 数据结构--网络2011,2012(集美大学) |
| ---- | ---- | ---- | ---- |
| 这个作业的地址 | C语言博客作业05--查找
| 这个作业的目标 | 学习查找的相关结构 |
| 姓名 | 张官德 |

C语言博客作业05--查找

  • 顺序查找
    查找方式为从头扫到尾,找到待查找元素即查找成功,若到尾部没有找到,说明查找失败。
  • 二叉搜索树做插入操作
    若二叉排序树为空,则创建一个key域为k的节点。将它作为根结点;否则将k和
    根结点的关键字比较,若俩者相同,则说明树中已有该关键字,无需插入;若k<key,
    则将它插入根结点的左子树中,否则插入右子树中。

    • 创建
    
    
    • 插入
    
    
    • 删除
    
    
    

    平衡二叉搜索树又被称为AVL树,且具有以下性质:
    1.本身首先是一棵二叉搜索树。
    2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。
    也就是说,AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树)
    失衡做法

    有一组数据{16,3,7,11,9,26,18,14,15}一个个插入后失衡调节方法如下:

    • AVL树的高度和树的总节点数n的关系?
      设N(h)为高度为h的AVL树的最小节点数目,则N(h)=N(h-1) + N(h-2) +1; N(0)=0, N(1)=1; 类似斐波那契数列; 插入、查找和删除的性能均为log(n)
    • 介绍基于AVL树结构实现的STL容器map的特点、用法
      STL总共实现了两种不同结构的管理式容器:树形结构和哈希结构。
      Map是STL的一个关联容器,翻译为映射,数组也是一种映射。
      map通常被实现为二叉搜索树(更准确的说:平衡二叉搜索树(红黑树))。
      红黑树是一种二叉查找树,但在每个节点增加一个存储位表示节点的颜色,可以是红或黑(非红即黑)。
      通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,因此,红黑树是一种弱平衡二叉树,相对于要求严格的AVL树来说,它的旋转次数少,所以对于搜索,插入,删除操作较多的情况下,通常使用红黑树。
      特点:map提供关键字到值的映射 ,其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个称为该关键字的值。
    • 1)B-树和AVL树区别,其要解决什么问题?
      B-树是一棵多叉平衡搜索树,旨在比AVL树能够拥有更低的树高,提高查找的效率,但是同AVL树一样,面对插入和删除数据的操作后需要维持平衡,这可能带来一些得不偿失的情况。
      其次B-树可以被采用在外存的数据查询上,因为树高比较低,这样就可以减少磁盘的I/O次数
    • 2)B-树定义。结合数据介绍B-树的插入、删除的操作,尤其是节点的合并、分裂的情况。

    B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。

    一颗m阶的B树定义如下:

    1)每个结点最多有m-1个关键字。

    2)根结点最少可以只有1个关键字。

    3)非根结点至少有Math.ceil(m/2)-1个关键字。

    4)每个结点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。

    5)所有叶子结点都位于同一层,或者说根结点到每个叶子结点的长度都相同。

    • B树的插入
      对高度为h的m阶B树,新结点一般是插在第h层。通过检索可以确定关键码应插入的位置。然后分两种情况讨论:

    (1)若该结点中关键码个数小于m-1,则直接插入。

    (2)如该结点中关键码个数等于m-1,则将引起结点的分裂。以中间关键码为界将结点一分为二,产生一个新结点, 并把中间关键码插入到父结点(h-1层)中。

    (3)向父亲结点插入中间关键字的时候,重复以上两个步骤最坏情况一直分裂到根结点,建立一个新的根结点,整个B树增加一层

    • B树的删除
      删除操作是指,根据key删除记录,如果B树中的记录中不存对应key的记录,则删除失败。

    1)如果当前需要删除的key位于非叶子结点上,则用后继key(这里的后继key均指后继记录的意思)覆盖要删除的key,

    然后在后继key所在的子支中删除该后继key。此时后继key一定位于叶子结点上,这个过程和二叉搜索树删除结点的方式类似。删除这个记录后执行第2步

    2)该结点key个数大于等于Math.ceil(m/2)-1,结束删除操作,否则执行第3步。

    3)如果兄弟结点key个数大于Math.ceil(m/2)-1,则父结点中的key下移到该结点,兄弟结点中的一个key上移,删除操作结束。

    否则,将父结点中的key下移与当前结点及它的兄弟结点中的key合并,形成一个新的结点。原父结点中的key的两个孩子指针就变成了一个孩子指针,

    指向这个新结点。然后当前结点的指针指向父结点,重复上第2步。

    例如:

    • B+树的定义
      每个节点最多可以有 m 个元素;

    除了根节点外,每个节点最少有 (m/2) 个元素;

    如果根节点不是叶节点,那么它最少有 2 个孩子节点;

    所有的叶子节点都在同一层;

    一个有 k 个孩子节点的非叶子节点有 (k-1) 个元素,按升序排列;

    某个元素的左子树中的元素都比它小,右子树的元素都大于或等于它;

    非叶子节点只存放关键字和指向下一个孩子节点的索引,记录只存放在叶子节点中;

    相邻的叶子节点之间用指针相连。

    • B+树的用途:
      B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。
      B+树的磁盘读写代价更低,盘块能容纳的结点中关键字数量更多,一次性读入内存中可以查找的关键字也就越多
    • 1)哈希表的设计主要涉及哪几个内容?
      哈希表(hash table)又称散列表,其基本思路是,设要存储的元素个数为n.设置一一个长度为m(m≥n)的连续内存单元,以每个元素的关键字k;(0≤i≤<n-1)为自变量,通过一个称为
      称为哈希函数(hash function)的函数h(ki)把k;映射为内存单元的地址(或下标)h(ki),并把该元素存储在这个内存单元中,h(k.)也称为哈希地址(hash adress)。把如此构造的线
      性表存储结构称为哈希表。

    • 2)哈希表的构造及ASL成功、不成功的计算

    • 3)哈希链的构造及ASL成功、不成功的计算

    伪代码:

    
    
    
    

    伪代码:

    
     
    

    特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


    举报收藏 0评论 0
    0相关评论
    相关最新动态
    推荐最新动态
    点击排行
    {
    网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号