野生前端的数据结构基础练习(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 留意是啥意思_初听不知曲中意八句

    留意是啥意思_初听不知曲中意八句弹到当时留意处,谁是相如

    2022年4月21日
    58
  • td-scdma/wcdma是什么意思_CDMA频段

    td-scdma/wcdma是什么意思_CDMA频段1.概述比较项目:核心网部分的异同接入网部分的差别业务提供上的异同2.核心网比较TD-SCDMA技术被3GPPR4采纳,因此在R4的核心网部分,TD-SCDMA与WCDMA没有差异:ØTD-SCDMA在核心网方面所用到的接口和主要协议与WCDMA一致。Ø在3GPP核心网中所提供的业务并没有将TD-SCDMA同WCDMA进行区分。Ø

    2022年10月3日
    4
  • 网吧管理软件激活成功教程

    网吧管理软件激活成功教程——————————————————————————-网吧管理软件激活成功教程作者:韦良君何利萍/Popunet 来源Conline网管软件不仅是存在漏洞而已,它们本身不是无懈可击的。有些漏洞会让它们彻底地失去作用。现在就一起来看看网管软件的致命伤。  《美萍》很受伤  受伤原因:…

    2022年7月12日
    55
  • 代码保护– 几款加壳工具

    代码保护– 几款加壳工具VirboxProtector(商用)分带授权的版本和独立壳。带授权的版本加壳后需要绑定许可,许可控制软件能否用,加壳保护安全。独立版的话就只是对代码做加壳,防止代码反编译。碎片代码执行、外壳加密、混淆、数据加密。服务商提供了较为完善的文档以及加密方式,提供了较为充分的产品管理平台,以及云端网络加密,并且对于开发者免费使用。使用评价:简单下载使用了一下,提供的功能很多,并且管…

    2022年6月27日
    51
  • 优秀的app交互界面设计_界面交互设计是什么

    优秀的app交互界面设计_界面交互设计是什么食品O2OAPP界面,这种色调是让人很有食欲,很温暖的感觉音乐APP设计界面阅读APP界面–简洁大方,阅览读书就是要这种感觉一款生活服务类的APP,集合了生活的所有服务(家政保洁,衣物干洗,开锁换锁

    2022年8月6日
    7
  • visual c++ 6.0运行不了_visual c++2010无法启动程序

    visual c++ 6.0运行不了_visual c++2010无法启动程序php5.3、5.4和apache都是用vc9编译,电脑必须安装vc9运行库才能运行。php5.5、5.6是vc11编译,如用php5.5、5.6必须安装vc11运行库。php7.0、7.1是vc14编译,如用php7.0、7.1必须安装vc14运行库。php5.5以上才有64位的,其他均为32位。所以64位的系统最好把32位的运行库也安装上。如果您下载的是32位的phpStudy,需要安装32位…

    2022年8月12日
    9

发表回复

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

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