• 数据结构:第七章学习小结


                                                   第7章    查找

    一、内容小结

    (1)基本概念:

    ①查找表:是由同一类型的数据元素(或记录)构成的集合 (eg.线性表、树表、散列表);

    ②关键字:是数据元素(或记录)中某个数据项的值--》作为一种"标识";

    ③查找:根据给定的值,在查找表中确定一个其关键字等于给定值得记录或数据元素;

                  查找成功即返回该关键字信息,失败则可返回"空"指针或"空"记录。

    ④动态查找表和静态查找表:*前者*查找的同时对表做修改操作(如插入和删除),反之为后者。

    ⑤平均查找长度(ASL):确定给定关键字在表中的位置,需和给定值进行比较的关键字个数的期待值:

                     

    (2)关于散列表:

        ①散列函数的常用构造方法
          1、好的散列函数:计算简单,散列地址分布均匀;

          2、数字分析法:对数字进行一定左移、右移或旋转

          3、平方取中法:平方,取平方数中间三位数

          4、折叠法:将关键字从左到右分割成位数相等的几部分(注意最后一部分位数不够时可以短些),然后将这几部分叠加求和,并按散列表表长,取后几位作                            为散列地址;

          5、除留余数法:f(key)=key mod p 

         ②散列表中处理冲突的方法:

    1、开放地址法:发生冲突时,采用合适方法计算得到另一存记录的地址。若还出现冲突,则继续寻找,以此类推得到最终地址。

    2、链地址法:把具有相同散列表散列地址的记录放在同一个单链表中,称为同义词链表。(根据散列地址再进行插入关键字)

    二、作业/实践中学习心得

    1.关于二分查找的SPOC讨论:while(low<=high)的条件改为while(low<high)会出现如何的结果?

    p.s.我选了课堂上老师的例子将大概分析过程都列了出来,感觉自己对二分查找中的low和high的分析掌握了些~

    *后面看到同学的更简单明了的方法:利用只有一个元素的查找表来比较给定值,此时进入查找的条件就是low==high,所以可以更好地了解while中的条件为什么需要的是low<=high了~

    2.PTA的个人小测(关于哈希表的一些应用--处理冲突):

       设有一组关键字:(10,16,32,17,31,30,20),哈希函数为:H(key) =key MOD 11,表长为12,线性探测法处理冲突。试回答下列问题: 1、画出哈希表的示意图;2、若查找关键字20,需要依次与哪些关键字进行比较? 3、若查找关键字27,需要依次与哪些关键字比较? 4、假定每个关键字的查找概率相等,求查找成功时的平均查找长度。 5、求装填因子。

    *在上课时通过老师的过程演示,自己也慢慢学到了如何填哈希表,按照给定的关键字序列按顺序满足哈希函数的条件填入哈希表,出现冲突(余数相同)需要往后找空格填。查找对应关键字时,例如查找关键字20,首先要与H(20) = 20 % 11 = 9号单元内容比较,即20 vs 31,不正确。则还要依次顺移,与10,32,20相比,一共比较4次。即要包括到查找到对应关键字的次数。

    出现问题?=》给定需要查找的关键字不存在在查找表中时,需要比较几次呢?(网上查找到两种情况):

    ①在关键字取余后与对应单元格内容比较时,若对应单元格为空。则只需比较这一次。

    ②若第一次查找的对应单元格不为空,则依次顺移比较,比较次数约为关键字序列的长度。

    *装填因子即为:关键字个数/散列表表长*

    三、目标完成情况

    上一周的目标为课前预习课后实践,关于第7章查找的内容,感觉自己有在这一周中发现了以前在查找算法上的一些理解不足,并在各样的实践中慢慢培养了自己尝试思考分析过程,可能中途也遇到了一些难题是有点卡住的,最后还是通过与同学的讨论或者网上博客的学习得到了一些答案,感觉自己在本章的学习的吃力程度也在慢慢减少,反而兴趣有在增加,这一点是让自己挺欣慰的。

    下周目标:马上要进入第8章以及期末,希望自己在空闲时间内不仅可以复习巩固一下前面几章的关键内容,也要做好预习准备。在作业和实践中也尽量继续保持求知好问(可以通过博客学习)的心态坚持下去!

  • 相关阅读:
    数组
    Java读取键盘输入
    Java不同类型字符转换String/int/Float/////
    微信公众号第三方验证的代码实现
    Debian Tips【在Debian下使用dos2unix、unix2dos、ifconfig、Adobe Flash Player、蓝牙音响等工具】
    数组的三种方式总结 多维数组的遍历 Arrays类的常用方法总结
    java基本数据类型总结 类型转换 final关键字的用法
    Maven通解
    IDEA——错误: 找不到或无法加载主类 com.Main
    Docker安装mysql,redis,mongodb数据库,docker常用命令,以及更换阿里镜像地址
  • 原文地址:https://www.cnblogs.com/heyi-777/p/13196713.html
Copyright © 2020-2023  润新知