数据结构笔记(六)——散列(Hash Table)之散列函数(1)

2023-11-19

散列表(hash table)的实现叫做散列(hashing)。这是以常数平均时间O(1)进行插入、删除和查找的技术。散列表没有顺序,需要元素间排序信息的操作,如findMin、findMax不会得到有效支持(就是这东西不是这么用的,你可以实现,但效率不会很高)。理想情况下,散列表是一个包含关键字的具有固定大小的数组,数组大小一般被视为散列表的一部分。数据通过散列函数简单的计算映射到数组适当的位置上,理想情况下当然是每个关键字对应一个位置,但这是不可能的。关键字那么多,数组大小总是有限的,总会有那么两个关键字被映射到同一个位置。因此我们放宽要求,希望散列函数简单,而且使关键字分布得比较均匀。一般关键字有整数和字符串,对应就有不同的散列函数,这里介绍几种散列函数:

关键字为整数:

1、取余法

用关键字对M取余作为散列地址,散列函数为hash(x)=x mod M,M一般为数组大小。这里的数组大小需要仔细考虑,设想如果M=10,而关键字都以0结尾,他们将会全部散列到0这个位置。一般取M为素数是比较好的选择。当然对于取余法还有很多可以改进的地方,比如对x进行线性运算(a*x+b)再取余来增大每个x的间隔,x乘一个小数对结果的小数部分进行其他操作等,散列函数还是

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构笔记(六)——散列(Hash Table)之散列函数(1) 的相关文章

随机推荐

  • Linux下高效编写Shell—shell特殊字符汇总

    全文转载 Linux下高效编写Shell shell特殊字符汇总 Linux下无论如何都是要用到shell命令的 在Shell的实际使用中 有编程经验的很容易上手 但稍微有难度的是shell里面的那些个符号 各种特殊的符号在我们编写Shel
  • Eclipse安装Maven插件

    原文地址 http dead knight iteye com blog 1841658 参考地址 http www blogjava net fancydeepin archive 2012 07 13 eclipse maven3 pl
  • leetcode138.复制带随即指针的链表

    思路 struct Node copyRandomList struct Node head struct Node cur head while cur struct Node copy struct Node malloc sizeof
  • linux terminal终端操作默认是emacs模式,可以设置为vim操作模式

    在linux终端里输入 set o vi 操作行为与vim一致 默认是insert模式 比如上一个命令 在esc之后 直接k就可以
  • 前端工程化(1):process.env环境的使用

    前端工程化 1 process env环境的使用 这里是一个简易的例子 0 在前端工程化中 我们需要根据开发环境还是生产环境来进行判断某些函数是否执行 某些字段是否变化 简单来说就是环境变量 1 简单的例子 一个最简单的例子 从vue te
  • 详解数据架构的七类视图(多图+案例)

    数据架构是业务与应用系统建设的桥梁 数据架构基于业务架构 业务模式 流程 规则等 识别出业务数据需求 统一数据语言及操作手段 作为应用系统的应用架构 系统功能 组件 接口等 和技术架构 技术指标 技术选型等 设计和开发的依据 一 企业架构概
  • python numpy数组切片_Python NumPy 数组(Array)切片

    1 数组切片 在python中 切片意味着从一个给定索引获取元素到另一个给定索引 我们这样传切片而不是索引 start end 我们还可以这样定义step start end step 如果我们不传start 则将其视为0 如果我们不传en
  • matlab中国官网下载,首页 - MATLAB中文论坛

    阅读来自MathWorks资深工程师的技术博客 I published Round With Ties to Even a couple of days ago Steve Eddins and Daniel Dolan immediate
  • Android Spider JDAX-GUI 反编译工具下载使用以及相关技术介绍

    文章目录 前言 一 JDAX下载 二 基本使用 2 1 解压zip 2 2 Java环境 2 3 进入Dos命令窗口启动Jdax Gui 2 4 正常使用 三 常见的反编译工具以及简单分析介绍 1 Android Killer 2 Dex2
  • qsort(),sort()排序函数

    一 qsort 函数 功 能 使用快速排序例程进行排序 头文件 stdlib h 用 法 void qsort void base int nelem int width int fcmp const void const void 参数
  • 面试题六道-2022-1-6

    CopyOnWriteArrayList的底层原理是怎样的 1 首先CopyOnWriteArraylist内部也是用过数组来实现的 在向CopyOnWriteArrayLlist添加元素时 会复制一个新的数组 写操作在新数组上进行 读操作
  • 尚筹网-前台-会员系统(springboot,springcloud 实战)

    总目标 环境搭建 会员登录注册 发起众筹项目 展示众筹项目 支持众筹项目 订单 支付 1 会员系统架构 1 1 架构图 1 2 需要创建的工程 父工程 聚合工程 shangcouwang01 member parent 唯一的pom工程 注
  • 强化学习 9 —— DQN 改进算法 DDQN、Dueling DQN 详解与tensorflow 2.0实现

    上篇文章强化学习 详解 DQN 算法介绍了 DQN 算法 但是 DQN 还存在一些问题 本篇文章介绍针对 DQN 的问题的改进算法 一 Double DQN 算法 1 算法介绍 DQN的问题有 目标 Q 值 Q Target 计算是否准确
  • VUE常用UI组件插件及框架-vue前端UI框架收集

    UI组件及框架 element 饿了么出品的Vue2的web UI工具套件 mint ui Vue 2的移动UI元素 iview 基于 Vuejs 的开源 UI 组件库 Keen UI 轻量级的基本UI组件合集 vue material 通
  • Java jar包启动及停止

    此处以SpringBoot maven工程为基础 基于Windows系统 工程开发好后 打包成jar包 一 启动jar包 在包所在的目录下运行cmd命令 执行命令 java jar jar包名 二 停止 1 用管理员打开cmd命令窗口 2
  • Java安全之SSL/TLS

    在前面所讲到的一些安全技术手段如 消息摘要 加解密算法 数字签名和数据证书等 一般都不会由开发者直接地去使用 而是经过了一定的封装 甚至形成了某些安全协议 再暴露出一定的接口来供开发者使用 因为直接使用这些安全手段 对开发者的学习成本太高
  • 初学树莓派——(六)树莓派安装OpenCV及USB摄像头配置

    目录 1 安装OpenCV 1 1前言 1 2换源及源内容更新 1 3安装依赖 1 4下载whl包 1 5安装OpenCV 1 6检查安装 2 USB摄像头配置 同时检查OpenCV安装情况 2 1前言 2 2Python调用cv2库来检查
  • sem_init函数用法

    sem init函数 sem init函数是Posix信号量操作中的函数 sem init 初始化一个定位在 sem 的匿名信号量 value 参数指定信号量的初始值 pshared 参数指明信号量是由进程内线程共享 还是由进程之间共享 如
  • 最优化算法概述以及常见分类

    1 最优化问题概述 通俗的来说 最优化问题就是在一定的条件约束下 使得效果最好 最优化问题是一种数学问题 是研究在给定的约束之下如何求得某些因素的量 来使得某一指标达到最优的学科 工程设计中最优化问题的一般说法是 选择一组参数 在满足一系列
  • 数据结构笔记(六)——散列(Hash Table)之散列函数(1)

    散列表 hash table 的实现叫做散列 hashing 这是以常数平均时间O 1 进行插入 删除和查找的技术 散列表没有顺序 需要元素间排序信息的操作 如findMin findMax不会得到有效支持 就是这东西不是这么用的 你可以实