DS第七章学习小结

第七章小结

先列出一些基本的概念:

①关键字:数据元素(记录)中某个数据项的值,用它可以表示一个数据元素。

②动态查找表/静态查找表:若在查找的过程中进行修改操作(插入或删除),则相应的表为动态查找表,否则为静态查找表。

③平均查找长度:为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值称为查找算法在查找成功时的平均查找长度。公式如下:ASL=∑PiCi (i=1,2,3,…,n),可以简单以数学上的期望来这么理解。其中:Pi 为查找表中第i个数据元素的概率,Ci为找到第i个数据元素时已经比较过的次数。

下图为本章的思维导图

1.  顺序查找

   从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关键字与a相等,则查找成功;若扫描结束后,仍未找到关键字等于a的结点,则查找失败。

      顺序查找也是最普通的一种方法,我们刚开始学习的时候几乎都会用这种查找方法,也就是从头开始,一个一个地进行比较,所以这也是效率最低的一个方法。

      适用于线性表的顺序存储结构和链式存储结构。

   查找成功时的平均查找长度为: ASL = 1/n(1+2+3+…+n) = (n+1)/2 ;

2.  折半查找

  搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如                 果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

    

    折半计算mid的公式

    mid = (low+high)/2;
        if(a[mid]==value)
            return mid;
        if(a[mid]>value)
            high = mid-1;
        if(a[mid]<value)
            low = mid+1;

3.  分块查找

   二分查找表使分块有序的线性表和索引表(抽取各块中的最大关键字及其起始位置构成索引表)组成,由于表是分块有序的,所以索引表是一个递增有序表,因此采用顺序或二分查找索引表,以               确定待查结点在哪                 一 块,由于块内无序,只能用顺序查找。 

4.  树表查找 

   

    二叉排序树(Binary Sort Tree),又称为二叉查找树。它或者是一棵空树,或者是具有下列性质的二叉树。
        若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
        若它的右子树不空 ,则右子树上所有结点的值均大于它的根结点的值;
        它的左、右子树也分别为二叉排序树。

    平衡二叉树(AVL树)

          平衡二叉树,是一种二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1。

          从平衡二叉的英文名字(AVL树),你也可以体会到,它是一种高度平衡的二叉排序树。

          高度平衡意思是说,要么它是一棵空树,要么它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。

  

 

  B-树

    B树可以看作是对查找树的一种扩展,即他允许每个节点有M-1个子节点。

    •   根节点至少有两个子节点
    •   每个节点有M-1个key,并且以升序排列
    •   位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间
    • 其它节点至少有M/2个子节点

      B+树

    • B+树是对B树的一种变形树,它与B树的差异在于:
    • 有k个子结点的结点必然有k个关键码;
    • 非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。
    • 树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。

 

5.  散列表

   (1)基本概念:

    散列函数和散列地址:在记录的存储位置p和其关键字key之间建立一个确定的对应关系H,使p=H(key),称这个对应关系H为散列函数,p为散列地址。

    散列表:一个有限连续的地址空间,用以存储按散列函数计算得到相应散列地址的数据记录。

    冲突和同义词:对不同的关键字可能得到同一散列地址,这种现象成为冲突。具有相同函数值的关键字对该散列函数来说称作同义词,key1和key2互称为同义词。

  (2)散列函数的构造方法:

    数字分析法;平方取中法;折叠法;除留余数法 (假设散列表表长为m,选择一个不大于m的数p,用p去除关键字,除后所得余数为散列地址)

   (3)处理冲突的办法

    开放地址法:线性探测法;二次探测法;伪随机探测法

链地址法

总结

上一次的目标基本达成,还顺带学习了一下map的用法,

下一阶段的目标:备考准备,好好复习。

原文地址:https://www.cnblogs.com/hxyawsl/p/10963574.html

时间: 2024-10-07 23:33:57

DS第七章学习小结的相关文章

第七章学习小结

第七章主要学习了很多种查找方式,从最简单的线性表查找到树表的查找到散列表查找,不同的查找方式有不同的优点,下面根据练习来实际应用这些知识. 这个问题的任务很简单:将一个不同的正整数序列插入哈希表,并输出输入数字的位置.散列函数定义为h(key)=key%tsize,其中tsize是散列表的最大大小.二次探测(只有正增量)用于解决碰撞.请注意,表的大小最好是素数.如果用户给定的最大大小不是质数,则必须将表大小重新定义为大于用户给定大小的最小质数.输入规格:每个输入文件包含一个测试用例.对于每种情况

DS第4章学习小结

你对本章内容的小结 完成作业或实践时解决困难的经验分享 这段时间,你参考了哪些值得向大家分享的资料?每一项推荐都请说明推荐理由及列出相关链接(或书目名称,具体页码) 目前学习过程中存在的困难,待解决或待改进的问题 上次博客确定的目标达到了吗?如果没达到,请分析原因 接下来的目标 一.你对本章内容的小结 第4章主要学习了串.数组 串主要学习了有关 模式匹配算法 的两种算法:T(n)=O(m*n)的BF算法 和 T(n)=O(m+n)的KMP算法, KMP算法难在求出 模式的next数组.(即求ne

DS第四章学习小结

本章最令人印象深刻的题就是AI核心代码这题了.如下 说实话,刚看到这题真的懵了,虽然只是一道题,但总给人6题的感觉.尽管困难重重,但还是在陈晓梅老师的指导下,大致完成了此题. 逻辑分析 先定义数据结构,自然是字符数组/字符串最初考虑主函数逻辑,主要是读取输入语句,并调用接口处理输入语句并输出.基本流程是,读入一句,对其进行扫描.判断.操作,再存到新的字符串,最后输出新的字符串. 一开始输入部分就卡住了,因为不知道怎么处理回车后还能输入数据,进度就陷入了停滞,不过课上根据老师所说getchar()

第三章学习小结—-转

[学习目标] 01掌握一维数组的声明和使用方法(OK) 02掌握二维数组的声明和使用方法(OK) 03掌握字符串的声明.赋值.比较和连接方法(连接很少用) 04熟悉字符的ASCII码和ctype.h中的字符函数 05正确认识++.+=等能修改变量的运算符(OK) 06学会用编译选项-Wall获得更多的警告信息(OK) 07了解不同操作系统中换行符的表示方法(嗯) 08掌握fgetc和getchar的使用方法(fgetc基本没用过) 09掌握预处理和迭代开发的技巧(嗯) 程序3-1 逆序输出 输入

2017-2018 20172309 《程序设计与数据结构(下)》第七章学习总结

2017-2018 20172309 <程序设计与数据结构(下)>第七章学习总结 一.教材学习内容总结 1.1关于二叉查找树的一些概念 二叉查找树具有附加属性,其左孩子小于父节点.而父节点又小余或者等于右结点. 因此二叉查找树的最右侧会存放最大元素.而其最左侧会存放最小元素. 二叉查找树是二叉树的扩展,它绝大数方法都会用到递归,二叉查找树的平均查找深度为O(log2N). 1.2实现二叉查找树 添加元素(addElement操作) 插入方法首先在插入的时候判断被插入元素的类型是不是Compar

数据结构 第一章学习小结

数据结构   第一章学习小结 1.数据结构第1章的心得体会: 这周学习了数据结构的绪论及第一章.初步了解了数据结构与算法的相关概念,一开始看书看视频时觉得还挺抽象的,不能够完全理解.但是反复多看了几遍之后,结合例题,自己去操作去跑代码,慢慢觉得容易理解接受起来了.由于现在以网课形式进行教学,老师上课的同时基本还是靠自己去理解学习.当然老师也发挥很大的作用,比如让我们更深入的了解递归的空间复杂度为什么与问题规模有关,又怎样去找到该函数的临界值等等.既锻炼了我们深入思考的能力,也让我们更加清楚了解不

第六七章学习体会-----(第六次)

在这周我看了第六章敏捷流程跟第七章MSF.并有了以下学习总结. 敏捷这个词听起来就是反应灵敏迅速而有效,而在软件按工程里,敏捷不同于现有做法之处在于,敏捷的价值观和流程是个人和交流.可用的软件.与客户合作.响应变化,而现有做法的则是流程和工具.完备的文档.为合同谈判.执行原定计划敏捷的开发原则是尽早并持续交付有价值的软件以满足顾客需求.只有不断关注技术和设计,才能越来越敏捷.只有能自我管理的团队才能创造优秀的架构.需求和设计.敏捷开发的原则很多,其中印象最深的就是"经常发布可用的软件,发布间隔

构建之法第七章学习心得

这周我学习了构建之法第七章MSF的介绍.MSF有9个基本原则,针对信息共享,团队内部运营,市场,还有客户.同样是强调效率,人性,灵活,还有前景. MSF对信息共享和沟通十分强调,对团队内部运营强调相互信任,各司其职.MSF敏捷开发模式分为两支,MSF敏捷开发模式和MSF CMMI开发模式.都是很人性,灵活,以及对自身有高要求的模式.结合上一章的敏捷流程和这次学习的MSF,在我看来相对比较迅捷,给人一种少了很严肃气愤的方法,个人还是比较喜欢.MSF的最大特性是商业化,并一直体现在项目的实施过程中.

《深入理解计算机系统》第七章学习笔记(初稿)

第七章 链接 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行.链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于加载时,也就是在程序被加载器加载到存储器并执行时:甚至执行于运行时,由应用程序来执行.在早期的计算机系统中,链接是手动执行的.在现代系统中,链接是由叫链接器的自动执行的. 理解链接器将帮助构造大型程序 理解链接器将帮助避免一些危险的编程错误 理解链接器将帮助语言的作用域规则是如何实现的 理解链接器将帮助其他重要