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. Web.xml详解分析

    一.首先了解项目加载的优先级 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter. 最终得出的结 ...

  2. 使用fpm 方便快速生成postgresql extension分发包

    fpm 是一个不错,而且强大的rpm.deb,系统启动服务工具包,我们可以用来快速的生成专业的软件分发包 演示一个pg 扩展包分发包的生成(rpm 以及deb) 安装fpm sudo gem inst ...

  3. CRM项目之stark组件

    . stark也是一个app(用startapp stark创建),目标时把这个做成一个可以拔插的组件 . setting文件下INSTALLED_APPS 路径要配置好(app的注册) . 写好si ...

  4. c 链表和动态内存分配

    兜兜转转又用到了c.c的一些基本却忘记的差不多了(笑哭)!! 动态内存分配 当malloc完将返回的指针类型强制转换成想要的类型后,指针中存有该指针的数据结构,而分配的内存恰好可用于该数据结构. 链表 ...

  5. Ubuntu 12.04图形界面不能登录问题

    问题描述:   Ubuntu 12.04进入到登录界面,输入用户名和密码无法登录, 输出密码后又跳回到登录界面,  执行快捷键Ctrl+Alt+F1, 可以进入tty1命令行, 可以root或者普通用 ...

  6. Win10下JDK环境变量的设置

    1.找到jdk正确的安装路径 2.打开环境变量设置 打开"资管管理器"后,右击"此电脑",点击"属性" 然后点击"高级系统设置&q ...

  7. VS在.NETFramework升级时遇到类库冲突如何解决

    相信大家在开发环境中随着程序的不断升级,很多时间需要升级. NETFramework版本.今天项目中遇到的问题是从. NETFramework4.0升级到4.5时提示 Entityframework. ...

  8. ubuntu16.04 安装最新版nodejs

    ubuntu软件仓库中自带的nodejs版本过低 $ apt-cache policy nodejs nodejs: Installed: (none) Candidate: 4.2.6~dfsg-1 ...

  9. 高阶函数map_reduce_sorted_filter

    能够把函数当成参数传递的参数就是高阶函数 map map: 功能: 拿iterable的每一个元素放入func中, func的返回值放入迭代器内进行返回 参数: iterable, func 返回: ...

  10. docker network基础

    前面介绍了nginx与php两个容器间是如何进行通信的: [root@docker ~]# docker run -d --name=php -v /www:/usr/local/nginx/html ...