当前位置: 首页 > news >正文

数据结构中,索引存储和散列存储区别较为详细的介绍

数据结构中有两种存储结构很容易搞混,那就是索引存储结构和散列存储结构(哈希存储结构)。

索引存储

根据地址就可以找到对应的关键字。可以理解成一个黄页,你根据一个人的名字,就可以找到他的电话。所以索引存储又被称为直接寻址。 数组就是一个常见的索引存储结构,可以通过下标来直接访问,下标(也就是关键字和地址相关)(具体原理可以看一下这里关于数组部分的描述:通过指针来使用数组),如果数组难以理解的话,那么字典是最常见、最容易理解的索引存储结构了(这里其实不太严谨,不过能大致辅助理解)。

散列存储

“散列存储”名字中的“散列”就是常听到的 hash(哈希值),hash 是通过一种算法来运算出来的,比如 MD5。在这种存储格式下,地址会通过 hash 算法来运算成一个相同长度的 hash 值,然后存放这个 hash 值,而不是直接存放地址。在访问关键字的时候会通过运算解码 hash 值,然后再访问。这个时候,节点的存储地址和关键字是有某种映射关系的。

二者区别

二者区别可以说就是多了一个 hash 函数运算的过程。但是为什么要多这一步操作,而且还会“浪费”计算机的性能呢?

答案是节省空间

因为计算机的存储空间是有限的,如果不考虑存储空间的限制,那么可以创建一个字典,为每个可能的关键字保留一个位置,然后通过索引直接寻址。
但是在一些情况下,实际存储的关键字数目往往比可能的关键字数目要少很多很多,就造成了巨大的空间浪费。如果这时候使用散列存储来替代索引存储。例如散列表使用一个长度与实际存储的关键字数目成比例的数组来存储,访问的时候将哈希值转换成对应的下标。
散列技术还有一个好处就是有优异的平均情况性能,而且在关键字集合是静态的时候,散列技术也可以提供出色的最坏性能。

在时间复杂度上,完全散列(perfect hashing)和基本的字典操作所需的都是O(1)的时间,也就是说,并没有太大时间上的区别。

而且二者有时还需要混用,所以区别不大。

不过有些人需要考试,考试里会出现相关题目,只要记得散列存储结构的存储地址和关键字存在某种映射关系即可。

希望可以帮到有需要的人~

相关文章:

  • 基于ssm+vue的邮票收藏鉴赏系统 elementui
  • 去中心化标志符在DID中的核心地位
  • C++设计模式之适配器模式(结构型模式)
  • 3-面试官:说说线程池的 7 大参数
  • 猿创征文|HCIE-Security Day50:网络攻击介绍
  • 一个基于NetCore开发的前后端分离CMS系统
  • centos7安装docker和docker-compose
  • 子查询与内联结分别应该怎么写?
  • Shell编程之第一讲——基础知识认识
  • Java-基于SSM的校园点餐管理系统
  • WLAN与WiFi各是什么意思有什么区别
  • Linux基础-常见问题 xrandr屏幕操作命令详解
  • Jenkins部署springboot项目至远程服务器
  • 商业化广告--体系学习-- 2 -- 行业蓝图篇 -- 广告产品与商业模式
  • 教程,如何给公众号文章或菜单添加附件?
  • 《Java编程思想》读书笔记-对象导论
  • Angular Elements 及其运作原理
  • ES6 ...操作符
  • FastReport在线报表设计器工作原理
  • Flannel解读
  • Flex布局到底解决了什么问题
  • IDEA常用插件整理
  • java8-模拟hadoop
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • PAT A1050
  • tweak 支持第三方库
  • 工作手记之html2canvas使用概述
  • 关于Flux,Vuex,Redux的思考
  • 码农张的Bug人生 - 初来乍到
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 使用putty远程连接linux
  • 试着探索高并发下的系统架构面貌
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​​​​​​​​​​​​​​Γ函数
  • $.ajax,axios,fetch三种ajax请求的区别
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (八)Flask之app.route装饰器函数的参数
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (三分钟)速览传统边缘检测算子
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)大型网站的系统架构
  • . Flume面试题
  • .apk文件,IIS不支持下载解决
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net 发送邮件
  • .ui文件相关
  • [ solr入门 ] - 利用solrJ进行检索
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • []使用 Tortoise SVN 创建 Externals 外部引用目录