zoukankan      html  css  js  c++  java
  • 数据结构:第七章学习小结

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

  • 相关阅读:
    JS LeetCode 1423. 可获得的最大点数简单题解
    SpringBoot 学集 (第六章) Docker
    Linux 学记 (第三章)
    Linux 学记 (第二章)
    Linux 学记 (第一章)
    SpringBoot 学集 (第五章) Web开发续
    SpringBoot 学集 (第四章)Web开发
    SpringBoot 学集 (第三章) 日志框架
    SpringBoot 学集 (第二章) 配置文件
    SpringBoot 学集 (第一章)
  • 原文地址:https://www.cnblogs.com/heyi-777/p/13196713.html
Copyright © 2011-2022 走看看