20162322 2017-2018-1 《程序设计与数据结构》第十一周学习总结

教材学习内容总结

哈希方法

一、定义

哈希:次序——更具体来说是项在集合中的位置——由所保存元素值的某个函数或是所保存元素的关键值的某些函数来决定。
冲突:两个元素或关键字映射到表中同一个位置的情形。
理想哈希函数:将每个元素映射到表中的唯一位置的哈希函数。

二、哈希函数

我们的目标不需要哈希函数构成理想哈希函数,而仅仅是寻找一个函数,它能合理地将元素散列到表中以避免冲突。

(一)构造哈希函数的方法

1. 抽取

仅使用元素值或关键字中的一部分来计算保存元素的位置。

2. 除法方法

使用某个关键字除以某个正整数p后的余数,作为给定元素的下标
函数定义为:Hashcode(key) = Math.abs(key)%p

3. 折叠方法

关键字划分为几段,然后再将它们组合或折叠在一起来建立表中的下标。

  • 移位折叠:即分段相加
  • 边界折叠:即分段反转

4. 平方取中方法

关键字自乘,然后使用抽取方法从平方结果的中部抽取相应的位得到下标。

5. 基数转换方法

关键字转换为另一种数值基数。

6. 数字分析方法

抽取关键字中的指定位并进行处理从而得到下标。

7. 长度依赖方法

(1)关键字和关键字的长度以某些方式组合起来,或直接当做下标使用,或再进一步使用其他方法进行处理而得到下标。
(2)长度依赖方法平方取中方法能适用于字符串。

三、解决冲突

1. 链式方法

  • 将哈希表看成是集合的表而不是各独立单元的表。每个单元中保存一个指针,指向表中该位置相关的元素的集合。通常表内的这些集合既没有先后次序也没有大小次序。
  • 实现方式:3种

2. 开放地址方法

  • 在表中寻找不同于该元素原先哈希到另一个开放的位置。
  • 查找表中可用的另一个位置的方法:线性探测方法、二次探测方法、双哈希方法。

四、从哈希表中删除元素

1. 从链式实现中删除:5种情形
2. 从开放地址实现中删除:必须为表中的每个结点添加一个boolean类型的标识。

五、Java Colletions API中的哈希表

HashtableHashMapHashSetIdentity-HashMapLinkedHashSetLinkedHashMapWeakHashMap

装载因子是哈希表扩展之前,表中允许的最大占有百分比。

教材学习中的问题和解决过程

(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )

  • 问题1:哈希函数的目标是什么?没有一个好的哈希函数的结果是什么?
  • 问题1解决方案:我们需要哈希函数能将元素合理地散列到表中。如果没有一个好的哈希函数,会让多个元素映射到表中的同一位置,使得性能降低。
  • 问题2:什么是装载因子,它如何影响到表的大小?
  • 问题2解决方案:装载因子是哈希表在扩展之前表中允许的最大占有百分比。一旦达到装在因子,就创建两倍于现有表长的新表,然后将现有表中的所有元素插入到新表中。

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 连通图具有以下属性中的哪一个?
    A. 对于任何一对顶点,它们之间都有一个边。
    B. 每个顶点都与其他顶点相邻。
    C. 没有顶点与其他顶点相邻。
    D. 对于任何一对顶点,它们之间都有一条路径。
    E. 存在与其他顶点相邻的顶点。

正确答案:D。在连通图中,对于任何一对顶点,它们之间都有一条路径。

  • 考虑一个有以下顶点和边的有向图:

顶点:1,2,3,4
边:(1,2),(2,1),(3,4)

下列哪个语句是正确的?
A. 图形有一个循环
B. 图形已连接
C. 该图是非循环的
D. 以上都是真实的
E. a,b,c都不是真的。

正确答案:A。这个图有一个循环,即边(1,2)和(2,1)。例如,它没有连接,因为在1和4之间没有路径。

  • 图是一种特殊的树。
    A. 正确
    B. 错误

正确答案:B。树是一种特殊的图形。

结对及互评

点评:

  • 博客中值得学习的或问题:

    • 没看懂“代码中的问题”,仅是放了两张图,没有叙述。
  • 其他

本周结对学习情况

  • 20162323

    • 结对照片
    • 结对学习内容
      • 一起做实验

其他(感悟、思考等,可选)

最近课程内容很难,自己理解起来略有一点费劲。课程学习内容较多,我个人还是更喜欢一个问题一个问题得解决。因此,本周就花了更多的时间消化课上学的图的章节的内容,并发了一篇博客将自己的所学进行了总结:最小生成树、最短路径问题总的来说我对于学习的态度一向是希望自己能够尽自己最大的努力将自己不懂的学懂,有时宁愿稍微停下新内容的学习。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 20/20 绪论
第二周 386/386 0/1 20/40
第三周 500/886 2/3 20/60 选择与排序、团队作业一(一)
第四周 300/1186 2/4 20/80 实验一(线性结构)、线性表、团队作业一 (二)
第五周 300/1486 2/6 20/100 栈、团队作业二
第六周 300/1786 2/8 20/120 队列、团队作业三
第七周 844/2630 3/11 20/140
第八周 544/3174 2/13 20/160 实验二(树)、二叉查找树 、团队作业四和五(一)
第九周 375/3645 2/15 20/180 哈夫曼树、堆和优先队列 、团队作业四和五(二)
第十周 1484/4813 5/19 30/210 实验三(查找与排序)、图 、《构建之法》第一章阅读
第十周 0/4813 3/19 30/210 哈希方法、图(二) 、团队作业六和七
  • 计划学习时间:20小时

  • 实际学习时间:20小时

  • 改进情况:多思考!多思考!

参考资料

20162322 朱娅霖 作业011 Hash的更多相关文章

  1. 20162322 朱娅霖 作业005&006 栈,队列

    20162322 2017-2018-1 <程序设计与数据结构>第五.六周学习总结 教材学习内容总结 集合的介绍(总述) 集合是收集并组织其他对象的对象.主要分为线性集合(集合中的元素排成 ...

  2. 20165227朱越 预备作业3 Linux安装及学习

    预备作业3 Linux安装及学习 Linux的安装 虚拟机的安装远没有想象中的那样容易,下载还没有出现什么问题,当我安装的时候,第一个问题出现在创建虚拟机时选择安装的虚拟机版本和类型的时候的错误 当时 ...

  3. 老男孩Python全栈学习 S9 日常作业 011

    1.编写装饰器,为函数加上统计时间的功能 import time def Decoration(func): def Timmer(): # 开始时间 Start = time.time() func ...

  4. 2017-2018 第一学期201623班《程序设计与数据结构》-第9&10周作业问题总结

    一.作业内容 第8周作业 http://www.cnblogs.com/rocedu/p/7484252.html#WEEK08 第9周作业 http://www.cnblogs.com/rocedu ...

  5. 2017-2018 第一学期201623班《程序设计与数据结构》-第7&8周作业问题总结

    一.作业内容 第7周作业 http://www.cnblogs.com/rocedu/p/7484252.html#WEEK07 第8周作业 http://www.cnblogs.com/rocedu ...

  6. 2017-2018 第一学期201623班《程序设计与数据结构》-第2&3周作业问题总结

    一.作业内容 第二周作业 http://www.cnblogs.com/rocedu/p/7484252.html#WEEK02 第三周作业 作业一定按教学进程中的模板提交 本周学习任务 点评结对同学 ...

  7. bug终结者 团队作业第一周

    bug终结者 团队作业第一周 小组组员及人员分工 小组成员 组长: 20162323 周楠 组员: 20162302 杨京典 20162322 朱娅霖 20162327 王旌含 20162328 蔡文 ...

  8. bug终结者 团队作业第二周

    bug终结者 团队作业第二周 我们小组选取游戏"开心消消乐",回答问题: 1. 此类软件是什么时候开始出现的, 这些软件是怎么说服你(陌生人)成为他们的用户的? 他们的目标都是盈利 ...

  9. bug终结者 团队作业第三周

    bug终结者 团队作业第三周 团队展示 队名 bug终结者 队员风采: 杨京典 20162302 风格:先构建框架,在一 一实现,在实现的过程中不断测试和修改. 擅长的技术:拆分问题,使用相对简单的思 ...

随机推荐

  1. 洛谷1101:单词方阵(DFS)

    题目描述 给一n×nn \times nn×n的字母方阵,内可能蕴含多个"yizhong"单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着888个方向的任一方向,同一单词摆放 ...

  2. SQL-记录创建篇-006

    创建记录: 自己添加记录: insert into table_name values(12,'张三',22) , values(1,'王五',32) insert into table_name(n ...

  3. Nmap版本检测

    -sV (版本检测) 打开版本检测.同时可以使用-A打开系统探测和版本探测. --allports(不为版本探测排除任何端口) 默认情况下,Nmap版本探测会跳过9100 TCP端口,也可以不理会任何 ...

  4. 《Netty in action》 读书笔记

    声明:这篇文章是记录读书过程中的知识点,并加以归纳总结,成文.文中图片.代码出自<Netty in action>. 1. 为什么用Netty? 每个框架的流行,都一定有它出众的地方.Ne ...

  5. python __name__ 和__main__的使用领悟

    __name__和__main__的使用 #hello.pydef sayHello(): str="hello" print(str); if __name__ == " ...

  6. python调用mediainfo工具批量提取视频信息

    写了2个脚本,分别是v1版本和v2版本 都是python调用mediainfo工具提取视频元数据信息 v1版本是使用pycharm中测试运行的,指定了视频路径 v2版本是最终交付给运营运行的,会把v2 ...

  7. MySQL 中,字符串 0 和数字 0 的区别

    我的理解: 用户输入值后,MySQL 根据该字段的数据类型,来转换值.

  8. 互联网同步yum服务器,中科大 rsync createrepo

    参考文章 https://blog.csdn.net/chenjia6605/article/details/82734945 1.本机安装所需工具: yum -y install rsync cre ...

  9. FluentData -Micro ORM with a fluent API that makes it simple to query a database 【MYSQL】

    官方地址:http://fluentdata.codeplex.com/documentation MYSQL: MySQL through the MySQL Connector .NET driv ...

  10. rtsp简介

    https://wenku.baidu.com/view/b10415dabd64783e08122b9c.html 1      概要 RTSP(Real Time Streaming Protoc ...