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. sails.js mvc framework learning

    目的:加快开发速度,总结使用方法: menu list: custom controller custom 模块使用 custom model custom middleware custom ser ...

  2. oracle-rman-3

    http://blog.csdn.net/leshami/article/details/6032525 rman概述及体系结构 http://blog.itpub.net/23513800/view ...

  3. Java高级特性 第1节 集合框架和泛型

    Java中,存储多个同类型的数据,可以用数组来实现,但数组有一些缺陷: 数组长度固定不变,布恩那个很好的适应元素数量动态变化的情况 可以通过数组.length获取数组长度,却无法直接获取数组中实际存储 ...

  4. 虚拟机安装及Oracle安装

    1.安装虚拟机(没难度,傻瓜装机) 新建虚拟机 自定义------下一步------- 稍后安装操作系统------下一步 下一步 下一步至完成 然后启动,就可以启动一个系统咯!!! 可以查一下虚拟机 ...

  5. CSS 社区的解决方案,对比

    在众多解决方案中,没有绝对的优劣.还是要结合自己的场景来决定. 我们团队在使用过 scss 和 css modules 后,仍然又重新选择了使用 scss.css modules 虽然有效解决了样式冲 ...

  6. Redis 集群知识点及命令

    Redis 集群命令 备注 cluster nodes 查看集群包含的节点 cluster meet <ip> <port> 将 ip 和 port 所指定的节点添加到 nod ...

  7. 根据CPU核心数确定线程池并发线程数

    一.抛出问题 关于如何计算并发线程数,一般分两派,来自两本书,且都是好书,到底哪个是对的?问题追踪后,整理如下: 第一派:<Java Concurrency in Practice>即&l ...

  8. c# 数据存储过程

    什么是存储过程? 用某百科的话来说就是一堆为了完成某一功能或者某些功能的SQL语句的集合,而数据库则会将这些存储过程的方法存储到数据库中去. 优点: 1.可重用并且效率高:存储过程经过一次编译后不需要 ...

  9. PhpAdmin支持登录远程数据库服务器

    转载:http://www.cnblogs.com/andydao/p/4227312.html 该数据,百度搜不到,Google1分钟搞定 一.如何设置phpMyAdmin自动登录? 首先在根目录找 ...

  10. 域名到站点的负载均衡技术一览(主要是探讨一台Nginx抵御大并发的解决方案)(转)https://www.cnblogs.com/EasonJim/p/7823410.html

    一.问题域 Nginx.LVS.Keepalived.F5.DNS轮询,往往讨论的是接入层的这样几个问题: 1)可用性:任何一台机器挂了,服务受不受影响 2)扩展性:能否通过增加机器,扩充系统的性能 ...