野生前端的数据结构基础练习(5)——散列

野生前端的数据结构基础练习(5)——散列野生前端的数据结构基础练习(5)——散列

大家好,又见面了,我是你们的朋友全栈君。

野生前端的数据结构基础练习(5)——散列

网上的相关教程非常多,基础知识自行搜索即可。

习题主要选自Orelly出版的《数据结构与算法javascript描述》一书。

参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/Hash

散列的基本知识

  • 定义

    哈希表是一种根据关键码去寻找值的数据映射结构,最直观的应用就是字典(现实的字典,不是数据结构的字典概念)。

  • 特点:

    • 插入,删除,取用较快,查找较慢(例如查询最值,需要借助其他数据结构来提升效率)。
    • 散列函数应该使位置结果尽可能分散,以减少位置碰撞。
    • 设计良好的Hash表能在常数级时间下寻找到需要的数据。
  • 常见散列函数

    • 除法散列法

    使用×××键对存储空间长度取模,所以存储空间长度一般取质数(取质数可以减小散列碰撞,不难理解)。

    • 平方散列法

    • 斐波那契散列法
  • 散列碰撞的一般解决方法

    • 拉链法

    位置发生碰撞时使用链表或其他数据结构将碰撞元素连接起来。

    • 线性寻址法

    当发生哈希碰撞时,从当前位置向后寻找到第一个没有使用的位置,将要加入的数据放在该处。一般在可使用空间大于待存数据量2倍时使用。

散列函数应用

散列函数相关的应用非常广,例如webpack打包时在文件名中添加的哈希值,将给定信息转换为固定位数字符串的加密信息等都是散列的实际应用,感兴趣的读者可以自行搜索加密摘要算法相关关键词进行学习。

基本练习

编写一个简易Hash类:

  • 属性
    • this.table 线性存储空间
  • 方法
    • simpleHash( )简易的哈希函数
    • show( )显示整个存储信息
    • put(value)将一个值存入哈希表中
    • find(value)根据实际需要编写的查找方法

课后习题(书中第八节习题)

  1. 使用线性探测法创建一个字典,用来保存单词的定义。该程序需要包含两个部分:第一部分从文本中读取一组单词和其定义,并将其存入散列表;第二部分让用户输入单词,程序找出该单词的定义。
  2. 用开链条法重新实现练习1。

习题思路

练习时可以先引入例题中的Hash类,然后通过extends来继承Hash类并复写set/get方法或添加新的方法。

转载于:https://blog.51cto.com/13869008/2311035

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107224.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA 正则表达式 (超详细)

    JAVA 正则表达式 (超详细)新网站上线欢迎大家网站交易中心在这里你可以购买或者出售你的网站。网站信息发布中心在这里有各种交易信息的发布。同时提供一些软件的免费使用(附有源码)。网站博客系统这里你可以注册自己的博客。一个账户无限量博客联系方式:support@websiteempire.cnQQ:563828566MSN:zhuhailin123@hotmail.com

    2022年7月19日
    11
  • jdbc连接mysql5.7_JDBC连接MySQL5.7的方法

    jdbc连接mysql5.7_JDBC连接MySQL5.7的方法1.首先准备mysql和eclipse环境,在环境搭建好之后,从eclipse官网下载jdbc的驱动包,下载地址http://dev.mysql.com/downloads/connector/j/2.从下载的文件中取出mysql-connector-java-5.1.31-bin.jar,放到工程中,并导入路径方法:右击工程名->BuildPath->ConfigureBuil…

    2022年9月8日
    2
  • 推荐安卓开发神器(里面有各种UI特效和实例)

    推荐安卓开发神器(里面有各种UI特效和实例)

    2021年8月31日
    51
  • datagrid 2021.1激活码破解方法

    datagrid 2021.1激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    83
  • minhash算法_verlet算法

    minhash算法_verlet算法背景如何设计一个比较两篇文章相似度的算法?可能你会回答几个比较传统点的思路:一种方案是先将两篇文章分别进行分词,得到一系列特征向量,然后计算特征向量之间的距离(可以计算它们之间的欧氏距离、海明距离或者夹角余弦等等),从而通过距离的大小来判断两篇文章的相似度。另外一种方案是传统hash,我们考虑为每一个web文档通过hash的方式生成一个指纹(fingerprint)。下面,我们来分析下这两种方法…

    2022年10月1日
    2
  • Python保留字简单释义「建议收藏」

    Python保留字简单释义「建议收藏」GuidovanRossum在1991年正式对外发布Python版本,现在已成为最流行的语言之一。分别执行以下命令,查询Python语言中的保留字:importkeywordkeyword.kwlist1.False表示假。//即在if语句中不会执行。注:在Python中可以给False赋值(改变原有是错误的意思)2.True表示真。//False的反义词3.No…

    2025年6月3日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号