40亿个QQ号,限制1G内存,如何去重?

a0265ca5f774d9a18dd37aa4010cb9cc.png

40亿个QQ号,限制1G内存,如何去重?

40亿个unsigned int,如果直接用内存存储的话,需要:

4*4000000000 /1024/1024/1024 = 14.9G ,考虑到其中有一些重复的话,那1G的空间也基本上是不够用的。

想要实现这个功能,可以借助位图。

使用位图的话,一个数字只需要占用1个bit,那么40亿个数字也就是:

4000000000 * 1 /8 /1024/1024 = 476M

相比于之前的14.9G来说,大大的节省了很多空间。

比如要把我的QQ号"907607222"放到Bitmap中,就需要找到第907607222这个位置,然后把他设置成1就可以了。

5a9c6dbdfa4e602b63becdd9ab67404c.png

图片

这样,把40亿个数字都放到Bitmap之后,所有位置上是1的表示存在,不为1的表示不存在,相同的QQ号只需要设置一次1就可以了,那么,最终就把所有是1的数字遍历出来就行了。

什么是BitMap?有什么用?

位图(BitMap),基本思想就是用一个bit来标记元素,bit是计算机中最小的单位,也就是我们常说的计算机中的0和1,这种就是用一个位来表示的。

所谓位图,其实就是一个bit数组,即每一个位置都是一个bit,其中的取值可以是0或者1

163fb7a613a792f5cb6862d4955db31e.png

图片

像上面的这个位图,可以用来表示1,4,6:

590b87ed058c3fb9add6cab9b1de5fcb.png

图片

如果不用位图的话,我们想要记录1,4,6 这三个整型的话,就需要用三个unsigned int,已知每个unsigned int占4个字节,那么就是3*4 = 12个字节,一个字节有8 bit,那么就是 12*8 = 96 个bit。

所以,位图最大的好处就是节省空间。

位图有很多种用途,特别适合用在去重、排序等场景中,著名的布隆过滤器就是基于位图实现的。

但是位图也有着一定的限制,那就是他只能表示0和1,无法存储其他的数字。所以他只适合这种能表示ture or false的场景。

什么是布隆过滤器,实现原理是什么?

布隆过滤器是一种数据结构,用于快速检索一个元素是否可能存在于一个集合(bit 数组)中。

它的基本原理是利用多个哈希函数,将一个元素映射成多个位,然后将这些位设置为 1。当查询一个元素时,如果这些位都被设置为 1,则认为元素可能存在于集合中,否则肯定不存在

所以,布隆过滤器可以准确的判断一个元素是否一定不存在,但是因为哈希冲突的存在,所以他没办法判断一个元素一定存在。只能判断可能存在。

6d0d3743ca258d61853a940b03b72aa1.png

图片

所以,布隆过滤器是存在误判的可能的,也就是当一个不存在的Hero元素,经过hash1、hash2和hash3之后,刚好和其他的值的哈希结果冲突了。那么就会被误判为存在,但是其实他并不存在。

70d27e7df4148cae9f42325446c7515a.png

图片

想要降低这种误判的概率,主要的办法就是降低哈希冲突的概率及引入更多的哈希算法。

下面是布隆过滤器的工作过程:

1、初始化布隆过滤器

在初始化布隆过滤器时,需要指定集合的大小和误判率。布隆过滤器内部包含一个bit数组和多个哈希函数,每个哈希函数都会生成一个索引值。

2、添加元素到布隆过滤器

要将一个元素添加到布隆过滤器中,首先需要将该元素通过多个哈希函数生成多个索引值,然后将这些索引值对应的位设置为 1。如果这些索引值已经被设置为 1,则不需要再次设置。

3、查询元素是否存在于布隆过滤器中

要查询一个元素是否存在于布隆过滤器中,需要将该元素通过多个哈希函数生成多个索引值,并判断这些索引值对应的位是否都被设置为 1。如果这些位都被设置为 1,则认为元素可能存在于集合中,否则肯定不存在。

布隆过滤器的主要优点是可以快速判断一个元素是否属于某个集合,并且可以在空间和时间上实现较高的效率。但是,它也存在一些缺点,例如:

  1. 布隆过滤器在判断元素是否存在时,有一定的误判率。、

  2. 布隆过滤器删除元素比较困难,因为删除一个元素需要将其对应的多个位设置为 0,但这些位可能被其他元素共享。

应用场景

布隆过滤器因为他的效率非常高,所以被广泛的使用,比较典型的场景有以下几个:

1、网页爬虫: 爬虫程序可以使用布隆过滤器来过滤掉已经爬取过的网页,避免重复爬取和浪费资源。

2、缓存系统: 缓存系统可以使用布隆过滤器来判断一个查询是否可能存在于缓存中,从而减少查询缓存的次数,提高查询效率。布隆过滤器也经常用来解决缓存穿透的问题。

3、分布式系统: 在分布式系统中,可以使用布隆过滤器来判断一个元素是否存在于分布式缓存中,避免在所有节点上进行查询,减少网络负载。

4、垃圾邮件过滤: 布隆过滤器可以用于判断一个邮件地址是否在垃圾邮件列表中,从而过滤掉垃圾邮件。

5、黑名单过滤: 布隆过滤器可以用于判断一个IP地址或手机号码是否在黑名单中,从而阻止恶意请求。

如何使用

Java中可以使用第三方库来实现布隆过滤器,常见的有Google Guava库和Apache Commons库以及Redis。

如Guava:

import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;
public class BloomFilterExample {public static void main(String[] args) {// 创建布隆过滤器,预计插入100个元素,误判率为0.01BloomFilter<String> bloomFilter = BloomFilter.create(Funnels.stringFunnel(), 100, 0.01);// 插入元素bloomFilter.put("Lynn");bloomFilter.put("666");bloomFilter.put("八股文");// 判断元素是否存在System.out.println(bloomFilter.mightContain("Lynn")); // trueSystem.out.println(bloomFilter.mightContain("张三"));  // false}
}

Apache Commons:

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.collections4.BloomFilter;
import org.apache.commons.collections4.functors.HashFunctionIdentity;
public class BloomFilterExample {public static void main(String[] args) {// 创建布隆过滤器,预计插入100个元素,误判率为0.01BloomFilter<String> bloomFilter = new BloomFilter<>(HashFunctionIdentity.hashFunction(StringUtils::hashCode), 100, 0.01);// 插入元素bloomFilter.put("Lynn");bloomFilter.put("666");bloomFilter.put("八股文");// 判断元素是否存在System.out.println(bloomFilter.mightContain("Lynn")); // trueSystem.out.println(bloomFilter.mightContain("张三"));  // false}
}

Redis中可以通过Bloom模块来使用,使用Redisson可以:

Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);
RBloomFilter<String> bloomFilter = redisson.getBloomFilter("myfilter");
bloomFilter.tryInit(100, 0.01);
bloomFilter.add("Lynn");
bloomFilter.add("666");
bloomFilter.add("八股文");
System.out.println(bloomFilter.contains("Lynn"));
System.out.println(bloomFilter.contains("张三"));
redisson.shutdown();

首先创建一个RedissonClient对象,然后通过该对象获取一个RBloomFilter对象,使用tryInit方法来初始化布隆过滤器,指定了最多能添加的元素数量为100,误判率为0.01。

然后,使用add方法将元素"犬小哈"、"666"和"八股文"添加到布隆过滤器中,使用contains方法来检查元素是否存在于布隆过滤器中。

或者Jedis也可以:

Jedis jedis = new Jedis("localhost");
jedis.bfCreate("myfilter", 100, 0.01);
jedis.bfAdd("myfilter", "Lynn");
jedis.bfAdd("myfilter", "666");
jedis.bfAdd("myfilter", "八股文");
System.out.println(jedis.bfExists("myfilter", "Lynn"));
System.out.println(jedis.bfExists("myfilter", "张三"));
jedis.close();

来源:blog.csdn.net/songmulin/article/details/130814507

 
 
 
 
 
这两天我搭建了一个自动发账号密码的商品,想买ChatGPT成品号的可以了解一下。数量不多,预购从速(另外GPT-4 Plus,买成品号和代充都可以,全部都是正规国外朋友信用卡充值,更稳定安全。GPT普通号api-key续费,Midjourney,notion AI,poe等都可以代充。有需要的,加v:amo198905),不用注册可以直接购买,支付页面需要保存下支付二维码,然后去支付宝或者微信扫一扫后。购买后,不会发邮件,需要你再回到商城点击最上面的【查看订单】,可以根据浏览器缓存或你输入的邮箱及密码,看到订单详情,点开就是账号和密码,过程是全自动的。扫码或者直接访问ChatGPT账号商店:http://www.itsmartfish.com

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一次读完半本「三体」!GPT-4最强竞品突然升级10万token,啃论文代码演示全搞定...

视学算法报道 编辑&#xff1a;编辑部 【导读】GPT-4 32K还没用上&#xff0c;ChatGPT最强竞品已经秒读「了不起的盖茨比」了。 在GPT-4 32K还在内测阶段&#xff0c;OpenAI的劲敌直接把上下文长度打了上去。 就在今天&#xff0c;初创公司Anthropic宣布&#xff0c;Claude已…

自从Notion有了AI……

“Notion AI是一款极其强大且易于使用的工具&#xff0c;可以帮助您整理知识&#xff0c;撰写文档和记录笔记。它为您提供了一个可以实现简单快捷导航的用户界面&#xff0c;使您可以轻松访问和管理所有的文件和资源。它还提供了一系列强大的功能&#xff0c;包括个性化定制&am…

100 美元“骗走” 15% 股份?估值 10 亿美元的创业独角兽 Stability AI 联合创始人起诉 CEO...

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 2022 年 8 月&#xff0c;一款名为 Stable Diffusion 的开源文本生成图像模型横空出世&#xff0c;惊艳四座。 一定程度&#xff0c;它的出现加速了 OpenAI 想更早推出 ChatGPT 的决心。 而就是这样一款…

HTML情人节表白代码,给女朋友的电子情书代码,女朋友表白代码

HTML情人节表白代码&#xff0c;给女朋友的电子情书代码&#xff0c;女朋友表白代码,可更换照片及表白内容。 使用方法 1、表白对话在assets/dialog.json 2、女朋友照片放在img中&#xff0c;直接替换即可 3、代码包需要放在WEB服务器里运行&#xff0c;本地用浏览器直接打开…

一封来自Java程序员的情书

点击上方“程序员小灰”&#xff0c;选择“置顶公众号” 有趣有内涵的文章第一时间送达&#xff01; 本文转载自公众号 Hollis 一直以来程序员都给大家以高智商低情商&#xff0c;不懂得浪漫不会哄女生开心的形象。但是&#xff0c;我觉得程序员都是浪漫的。对于这种错误观念&…

Python表白妙招,把情书写进她的照片里

前言 我的好兄弟们&#xff0c;2022年可算是过去了&#xff0c;这不马上要过年了吗 就是说&#xff0c;各位兄弟有对象了吗&#xff0c;没有的回家还要面对亲戚的各种提问 退一步来说&#xff0c;有心仪的人吗&#xff0c;如果有的话&#xff0c;就来看看这篇 程序员的表白小…

为生信写的Python简明教程 | 视频3

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在&#xff1a;https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

生信入门一对一,数据操作带你飞

前段时间有个朋友问了我一个问题&#xff0c;“如何从一个大的 FASTA 文件中提取给定的一系列基因的 ID”&#xff0c;她用 ChatGPT搜索了问题&#xff0c;拿到了代码&#xff0c;发给我看了下&#xff0c;ChatGPT写的确实好&#xff0c;刚开始学的人估计都写不了这么好&#x…

在生信中利用Chat GPT/GPT4

论文链接Ten Quick Tips for Harnessing the Power of ChatGPT/GPT-4 in Computational Biology | Papers With Code 之前在paper with code上比较火的一篇文章&#xff0c;最近要给生科的学长学姐们个分享所以把这个翻了翻&#xff0c;原文自认为废话比较多&#xff0c;于是选…

一只产品汪的低代码学习之路(一):ChatGPT眼中的低代码有多牛?

写在前面 作为一只本科财务&#xff0c;研究生信管半路出家的产品汪 “啥也不懂”和“就会写写SQL”已经成为了我工作属性的代名词 “可以但没必要”“you can you up&#xff0c;no can no bibi”“你到底懂不懂”是开发拒绝我的三板斧。 秉承着不蒸馍馍争口气的优良传统&…

【差异表达分析】差异表达分析标准不标准化这是一个问题(含其其它报错问题)

前言 在一开始学习基因差异表达分析时&#xff0c;老师就强调用raw count做差异分析&#xff0c;相关文献和资料我也保存了不少&#xff0c;我之前弄清楚log2/cpm与count fpkm等不是在一个水平上讨论的问题&#xff0c;但是具体用的时候还是要栽个跟头才能印象深刻。 我在复现…

PointNet++阅读笔记

&#xff08;PointNet是PointNet结构的改良&#xff0c;它增强了对点云模型细节的捕捉能力&#xff09; 摘要&#xff1a;PointNet并没有捕捉到点云的局部结构&#xff0c;而本文介绍了一种分层神经网络&#xff0c;用于捕捉点云的局部特征。 Introduction 背景&#xff1a;…

云平台网络——应用部署(一)

(可有可无的)引言 昨天完成了对学校集群的相关鉴权以后&#xff0c;大致理解了如何使用SSH登入教学集群&#xff0c;今天则是在此基础上进一步完成相关应用的部署&#xff0c;包括但不限于conda以及torch等和机器学习建模相关的软件安装&#xff0c;由于是第一次成功在云计算平…

用小学数学带你感受人工智能的魅力

AI因你而升温&#xff0c;记得加个星标哦&#xff01; 大家好&#xff0c;我是泰哥。在ChatGPT火爆出圈后&#xff0c;越来越多的人对人工智能、深度学习、神经网络等名词更加好奇&#xff0c;身边的朋友最近也频繁的问我&#xff0c;AI究竟为什么如此强大&#xff1f; 偷个懒&…

精选| 2023年1月R新包推荐(第72期)

译&#xff1a;黄小伟&#xff0c;目前就职于杭州有赞 知乎专栏&#xff1a;中国R语言社区 &#xff5c;30,000关注、300万阅读 2023年1月&#xff0c;165个R包收录于CRAN&#xff0c;环比增长42.4%&#xff0c;本月Top 40 R包分为14个类别&#xff0c;详细介绍如下&#xff1a…

我用Echarts图表分析巴西队历年战绩,预测卡塔尔世界杯能否夺冠

&#x1f431; 个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff1a;vue3从入门…

陶哲轩甩出调教GPT-4聊天记录,点击领取大佬的研究助理!

Datawhale干货 方向&#xff1a;GPT-4高级调教&#xff0c;来源&#xff1a;量子位 鹅妹子嘤&#xff0c;天才数学家陶哲轩搞数学研究&#xff0c;已经离不开普通人手里的“数学菜鸡”GPT了&#xff01; 就在他最新解决的一个数学难题下面&#xff0c;陶哲轩明确指出自己“使用…

ESP8266还可以这样玩

作者&#xff1a;晓宇&#xff0c;排版&#xff1a;晓宇 微信公众号&#xff1a;芯片之家&#xff08;ID&#xff1a;chiphome-dy&#xff09; 01 巨型ESP8266 ESP8266几乎无人不知&#xff0c;无人不晓了吧&#xff0c;相当一部分朋友接触物联网都是从ESP8266开始的&#xff…

笑死!推特限流,微博赢麻了;使用ChatGPT撰写简历;SD电脑配置推荐;斯坦福67门AI课程学习路径 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 因 Twitter 限流&#xff0c;大量海外画师涌入微博哈哈哈哈 7月3日&#xff0c;马斯克突然发推宣布用户浏览数量限制&#xff0c;新账…

想要成为 NLP 领域的大牛?从 ChatGPT 的 5 大自然语言模型开始了解吧(LM、Transformer、GPT、RLHF、LLM)——小白也能看得懂

目录 前言ChatGPT基础科普——知其一点所以然1. LM2. Transformer3. GPT4. RLHF5. LLM 参考资料其它资料下载 前言 如果想在自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;领域内脱颖而出&#xff0c;那么你一定不能错过 ChatGPT 的 5 大自然…