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. SQL-视图-004

    什么是视图? 优点:视图是保存在数据库中的SELECT查询,可以简化查询操作,视图可以从多个表中提取数据,并以单个表的形式显示结果,这样就可以针对多个表的查询转化为对一个表的查询. 映射:视图可以理解 ...

  2. C++ 值传递、指针传递、引用传递详解

    C++ 值传递.指针传递.引用传递详解 最近写了几篇深层次讨论数组和指针的文章,其中提到了“C语言中,所有非数组的形式参数传递均以值传递形式” 数组和指针背后——内存角度 语义"陷阱&quo ...

  3. 使用rpm 打包开发的postgres extension

      环境准备 安装依赖包 rpmdevtools rpm-build yum install -y rpm-build rpmdevtools 初始化rpm pacakge 项目 主要是rpm 打包的 ...

  4. Spring生态研习【二】:SpEL(Spring Expression Language)

    1. SpEL功能简介 它是spring生态里面的一个功能强大的描述语言,支在在运行期间对象图里面的数据查询和数据操作.语法和标准的EL一样,但是支持一些额外的功能特性,最显著的就是方法调用以及基本字 ...

  5. 减小delphi体积的方法

    1.关闭RTTI反射机制  自从Delphi2010中引入了新的RTTI反射机制后,编译出来的程序会变得很大,这是因为默认情况下 Delphi2010 给所有类都加上了反射机制.而我们的工程并不每每都 ...

  6. logback不输出日志消息,且SLF4J绑定源错误

    我之前的项目已经成功使用过logback作为日志输出,但是今天新项目在使用的时候,不输出日志信息. 最后终于找到问题所在,并成功解决.解决步骤如下: 第一步:检查pom.xml 按照以往惯例,我先检查 ...

  7. AI与RPA

    RPA(机器人流程自动化)是一类自动化软件工具,它可以通过用户界面使用和理解企业已有的应用,将基于规则的常规操作自动化,例如读取邮件和系统,计算,生成文件和报告,检查文件等.因此,RPA的应用范围非常 ...

  8. 通过WebClient模拟post上传文件到服务器

    写在前面 最近一直在研究sharepoint的文档库,在上传文件到文档库的过程中,需要模拟post请求,也查找了几种模拟方式,webclient算是比较简单的方式. 一个例子 这里写一个简单接受pos ...

  9. wordpress评论回复自动发邮件的功能

    A.插件流,可以说WP强大的插件功能的确能省事不少. 插件的办法一般是两步:第一实现成功发邮件,第二时间评论自动回复,这就需要用到两个插件,一个是Configure SMTP,一个是Mail To C ...

  10. seleniuim面试题1

    seleniuim面试题1 乙醇 创建于 4 个月 之前 最后更新时间 2018-09-11 selenium中如何判断元素是否存在? selenium中没有提供原生的方法判断元素是否存在,一般我们可 ...