算法笔记(十)—— 哈希函数和哈希表

news2024/7/6 18:22:12

认识哈希函数和哈希表的实现

哈希函数

哈希函数:输入域无穷,输出域(哈希值)相对有限

哈希函数:相同的输入一定会返回相同的输出值

由于输入域的无限和输出域的有限,不同的输入可能会返回相同的输出(哈希碰撞)

Note:将所有输入对应的输出,将所有输出值%m,得到的值在0~m-1上均匀分布(均匀性)。

Question:有一个无符号整数的文件,数据个数有40亿个,如何通过1G的内存返回出现次数最多的数

1. 对每个数调用哈希函数得到哈希值,将哈希值模上100,进行小文件分类(相同的数一定在同一文件)

2. 将每个小文件内出现次数最大的数进行比较即可

哈希表

通过哈希函数得到输出,通过取余将key-value挂在对应位置处(分桶)。

查找时,通过key对应哈希值来找即可。

布隆过滤器

eg. 目前有100亿个URL,需要通过黑名单来禁止访问(每个URL 64Byte),只需要添查操作。

使用布隆过滤器可以在很少空间内实现,但存在一定的失误率(不可避免),错将不在黑名单的URL认为在黑名单内。—— 宁错杀不放过

1. 使用整形数组来进行bitmap表示

2. 建立一个长度为m的bitmap,实际占用空间m/8 Byte

3. 添加黑名单:将URL通过哈希函数得到输出值%m,将该位设为1,再通过另一个哈希函数,同样处理,一共使用k个哈希函数

4. 查找时,通过同样的k个哈希函数,只有全是1时,判断该URL在黑名单内,有一个不是1,那么该URL不在黑名单内

提高m,会降低失误率,但随着m的逐渐增大,失误率的降低越来越慢。k与失误率的关系为一个对勾函数。

n(样本量),p(失误率)

单样本的大小和布隆过滤器无关。

m=(n*lnp)/(ln2)^2

k=ln2*m/n=0.7*m/n

p=(1-e(-n*k/m))^k

两个参数都向上取整即可

哈希一致性

用于讨论数据服务器组织的问题,降低数据迁移的成本。

将哈希值的返回域想象成环,假设有三台机器,m1,m2,m3。

 添加的时候只需要,将某个输入对应的哈希值,顺时针放到最近的服务器内即可

增加服务器:将m4与其逆时针最近服务器中间的数给到m4即可

删除服务器:数据全部给到顺时针最近的服务器内

存在的问题:

        1. 机器数量少时做不到分布均衡

        2. 增加或删除机器时会导致负载不均衡

使用虚拟节点解决:m1有一千个代表点,m2有一千个代表点,m3有一千个代表点,使用代表点来进行抢环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/358516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

配置Tomcat性能优化

配置Tomcat性能优化 📒博客主页: 微笑的段嘉许博客主页 💻微信公众号:微笑的段嘉许 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由微笑的段嘉许原创! &#x1f4…

常用类(五)System类

(1)System类常见方法和案例: (1)exit:退出当前程序 我们设计的代码如下所示: package com.ypl.System_;public class System_ {public static void main(String[] args) {//exit: 退出当前程序System.out.println("ok1"…

详解C++的类型转换

文章目录前言一、C语言中的类型转换二、为什么C需要四种转换三、C强制类型转换3.1 static_cast3.2 reinterpret_cast3.3 const_cast3.4 dynamic_cast四、RTTI总结前言 在C语言的类型转换有一个非常大的坑,有好多悄悄地转换,有时候把我们转换的就蒙了,因为C要兼容C语言,所以C就…

docker容器单机网络

前言 通过文章 容器的本质可知,容器只是一个进程,而容器所能看到的网络栈,是隔离在自己的 Network Namespace 中。docker 容器单机网络支持四种网络模式,也都是基于 Network Namespace 实现的。本文主要是介绍这四种模式的使用方…

四、actions处理异步行为和调用

四、actions处理异步行为和调用 action:装方法的一个对象。 使用场景:在Vuex运行的环节中,有异步操作——>就必须经过action mutations不能进行异步操作。 最常用的案例:异步请求获取数据 使用方式: 组件中使用a…

移动WEB开发一、基础知识

零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…

git ssh配置

ssh配置 执行以下命令进行配置 git config --global user.name “这里换上你的用户名” git config --global user.email “这里换上你的邮箱” 执行以下命令生成秘钥: ssh-keygen -t rsa -C “这里换上你的邮箱” 执行命令后需要进行3次或4次确认。直接全部回车就…

基于 ChatGPT 3.5 和 Bing 搜索引擎的会话式搜索引擎 Perplexity 初体验

一、背景 最近 ChatGPT 非常火爆,但是基础版经常访问失败,于是乎想找一些替代品。 搜到了一个 基于 ChatGPT 3.5 和 Bing 搜索的会话式搜索引擎 Perplexity 体验了下非常不错,值得推荐。 二、联系和区别 2.1 联系 官网在外媒社交媒体上…

三、NetworkX工具包实战3——特征工程【CS224W】(Datawhale组队学习)

开源内容:https://github.com/TommyZihao/zihao_course/tree/main/CS224W 子豪兄B 站视频:https://space.bilibili.com/1900783/channel/collectiondetail?sid915098 斯坦福官方课程主页:https://web.stanford.edu/class/cs224w NetworkX…

【安卓开发】安卓广播机制

读书笔记系列(第一行代码) 5.1 广播机制简介 标准广播:完全异步执行,广播发出后,所有广播接收器几乎都同一时刻收到这条广播(无法被截断)有序广播:同步执行,广播发出后…

优秀!19年后,它再次成为TIOBE年度编程语言

新年伊始,TIOBE发布了2022年度编程语言,C时隔19年再度登顶,成为2022年最受欢迎的编程语言。TIOBE在2003年首次统计编程语言的流行指数时,C便成为年度编程语言。2022年,C获得了最高的人气4.62%,紧随其后的是…

maven打包顺序与jvm类加载顺序

背景:一次dev测试过程中,发现代码中关于jsr303的校验失效,校验类如下,会报一个莫名其妙的运行时错误;遂进行排查。import javax.validation.constraints.NotBlank;Data Accessors(chain true) public class Demo {Not…

为什么会有跨域问题,代理是怎么解决的?

📖 文章导航关于跨域问题同源策略跨域资源共享解决方案前端代理后端服务端代理关于跨域问题 同源策略 同源策略(Same-origin policy)是浏览器中一个重要的安全策略,它用于限制不同源之间的资源交互。其目的是为了帮助阻隔恶意文…

由浅入深,一起来刷Java高级开发岗面试指南,面试必定无忧!

前言 我只想面个CV工程师,面试官偏偏让我挑战造火箭工程师,加上今年这个情况更是前后两男,但再难苟且的生活还要继续,饭碗还是要继续找的。在最近的面试中我一直在总结,每次面试回来也都会复盘,下面是我根…

Dubbo之SpringBoot启动源码详解

需要前置知识,了解spring源码,springboot自动加载机制等 DubboBootstrap启动 详细信息可看 学习Dubbo源码需要了解的基础内容源码详解 DubboBootstrap 启动所需要的信息 添加应用程序配置添加注册中心配置添加协议配置添加服务配置启动 SpringBoot启…

广东MES系统实施过程中的要点和难点

MES系统已经成为企业目前实施的焦点。但是MES系统又分为很多的种类,对企业之间则是很难选择的,因为大部分的企业对MES系统的要点和难点并不清楚,而今天就让先达盈致的小编带大家了解一下广东MES系统实施过程中的要点和难点。MES系统是实现企业…

戴尔T5810电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。硬件型号驱动情况主板戴尔T5810,C610/612芯片处理器英特尔至强E5-2620 v3已驱动内存12 GB已驱动硬盘500GB WD Blue Solid State Drive & 2TB Seagate Mobile Hard Drive (Upgraded)已驱动显卡RX 570 4Gb已驱…

october-cms

环境准备 靶机链接:百度网盘 请输入提取码 提取码:3e4s 虚拟机网络链接模式:桥接模式 攻击机系统:kali linux 2021.1 信息收集 1.探测目标靶机ip。 2.探测靶机开放端口和服务情况。 漏洞探测 1.访问网页 2.用dirsearch扫描…

用javascript分类刷leetcode15.链表(图文视频讲解)

链表操作如下图: 动画过大,点击查看 时间复杂度: prepend: O(1)append: 如果已知尾节点O(1),否则需要遍历到尾节点,然后加入新节点O(n)insert: 插入到已知节点的后面O(1),需要先查找后插入O(n)lookup: O…

【STM32笔记】__WFI();进入不了休眠的可能原因

【STM32笔记】__WFI();进入不了休眠的可能原因 【STM32笔记】低功耗模式配置及避坑汇总 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录解决方案)…