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

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

 

posted @ 2020-06-26 22:47  软件工程1902贺依  阅读(225)  评论(0编辑  收藏  举报