20162322 朱娅霖 作业011 Hash
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中的哈希表
Hashtable、HashMap、HashSet、Identity-HashMap、LinkedHashSet、LinkedHashMap和WeakHashMap。
装载因子是哈希表扩展之前,表中允许的最大占有百分比。
教材学习中的问题和解决过程
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )
- 问题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的更多相关文章
- 20162322 朱娅霖 作业005&006 栈,队列
20162322 2017-2018-1 <程序设计与数据结构>第五.六周学习总结 教材学习内容总结 集合的介绍(总述) 集合是收集并组织其他对象的对象.主要分为线性集合(集合中的元素排成 ...
- 20165227朱越 预备作业3 Linux安装及学习
预备作业3 Linux安装及学习 Linux的安装 虚拟机的安装远没有想象中的那样容易,下载还没有出现什么问题,当我安装的时候,第一个问题出现在创建虚拟机时选择安装的虚拟机版本和类型的时候的错误 当时 ...
- 老男孩Python全栈学习 S9 日常作业 011
1.编写装饰器,为函数加上统计时间的功能 import time def Decoration(func): def Timmer(): # 开始时间 Start = time.time() func ...
- 2017-2018 第一学期201623班《程序设计与数据结构》-第9&10周作业问题总结
一.作业内容 第8周作业 http://www.cnblogs.com/rocedu/p/7484252.html#WEEK08 第9周作业 http://www.cnblogs.com/rocedu ...
- 2017-2018 第一学期201623班《程序设计与数据结构》-第7&8周作业问题总结
一.作业内容 第7周作业 http://www.cnblogs.com/rocedu/p/7484252.html#WEEK07 第8周作业 http://www.cnblogs.com/rocedu ...
- 2017-2018 第一学期201623班《程序设计与数据结构》-第2&3周作业问题总结
一.作业内容 第二周作业 http://www.cnblogs.com/rocedu/p/7484252.html#WEEK02 第三周作业 作业一定按教学进程中的模板提交 本周学习任务 点评结对同学 ...
- bug终结者 团队作业第一周
bug终结者 团队作业第一周 小组组员及人员分工 小组成员 组长: 20162323 周楠 组员: 20162302 杨京典 20162322 朱娅霖 20162327 王旌含 20162328 蔡文 ...
- bug终结者 团队作业第二周
bug终结者 团队作业第二周 我们小组选取游戏"开心消消乐",回答问题: 1. 此类软件是什么时候开始出现的, 这些软件是怎么说服你(陌生人)成为他们的用户的? 他们的目标都是盈利 ...
- bug终结者 团队作业第三周
bug终结者 团队作业第三周 团队展示 队名 bug终结者 队员风采: 杨京典 20162302 风格:先构建框架,在一 一实现,在实现的过程中不断测试和修改. 擅长的技术:拆分问题,使用相对简单的思 ...
随机推荐
- Redis之在Linux上安装和简单的使用
我只是一个搬运工 Redis之在Linux上安装和简单的使用https://blog.csdn.net/qq_20989105/article/details/76390367 一.安装gcc 1.R ...
- 关于ajax跨域的一些解决方案
1.JSONP方式解决跨域问题 jsonp解决跨域问题是一个比较古老的方案(实际中不推荐使用),当然,在实际项目中如果要使用JSONP,一般会使用JQ等对JSONP进行了封装的类库来进行ajax请求 ...
- day06 内存地址 小数据池缓存机制
1. 内存相关 示例一 v1=[11,22,33] v2=[11,22,33] #值相等 内存地址不等 v1=11 v2=11 #按理说内存地址应该不等,但是python为了优化使其内存地址相等 v1 ...
- annotation的概念及其作用
概念 能够添加到 Java 源代码的语法元数据.类.方法.变量.参数.包都可以被注解,可用来将信息元数据与程序元素进行关联.Annotation 中文常译为“注解”. 作用 标记,用于告诉编译器一些信 ...
- XML二
XML的语法要求: 1,XML文档必须有一个顶层元素,即文档元素,所有其他元素必须嵌入在文档元素中. 2,元素嵌套要正确,即如果一个元素在另一个元素中开始,那么必须在同一个元素中结束. 3,每个元素必 ...
- JDK / JRE zip
Server JRE与JRE的区别: Server JRE一般用于服务器上安装,只有64bit版本,不会安装浏览器插件.自动更新,有监视工具.没有Java Fx和其他开发工具:有安装程序,只是一压缩目 ...
- LINUX 查看当前系统的内存使用情况 vmstat
Linux vmstat 命令 Vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况. 相比 ...
- [UE4]Safe Zone:安全区域
一.在做移动开发的时候,为了避免被手机上的硬件元素挡住界面,就可以使用Safe Zone控件,如下图所示的棕色区域就是Apple IphoneX的课被挡住界面的区域:上面的是Iphone的喇叭位置,下 ...
- 从Tomcat的处理web请求分析Java的内存模型
Tomcat作为一个java应用,同样是有主线程和子线程的.主线使用while(true)的方式一直循环,等待客户端来连接.一个客户端来了之后,就从线程池中拿一个线程来处理请求,如果没有配置线程池,就 ...
- 阿里Java开发手册
1.1 命名风格 (1)常量命名全部大写,单词间用下划线隔开. (2)抽象类命名以Abstract或Base开头:异常类命名以Exception结尾:测试类命名以它要测试的类名开始,以Test结尾. ...