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

网站建设资金报告长沙优化科技

网站建设资金报告,长沙优化科技,网站即将上线页面代码,单位网站和新媒体建设制度海量数据如何判重? 判断一个值是否存在?解决方法: 1.使用哈希表: 可以将数据进行哈希操作,将数据存储在相应的桶中。 查询时,根据哈希值定位到对应的桶,然后在桶内进行查找。这种方法的时间复…

海量数据如何判重?

判断一个值是否存在?解决方法:

1.使用哈希表:
可以将数据进行哈希操作,将数据存储在相应的桶中。
查询时,根据哈希值定位到对应的桶,然后在桶内进行查找。这种方法的时间复杂度为 O(1),但需要额外的存储空间来存储哈希表。如果桶中存在数据,则说明此值已存在,否则说明未存在。

2.使用布隆过滤器:
布隆过滤器是一种概率型数据结构,用于判断一个元素是否在集合中。它利用多个哈希函数映射数据到一个位数组,并将对应位置置为 1。
查询时,只需要对待查询的数据进行哈希,并判断对应的位是否都为 1。如果都为 1,则该数据可能存在;如果有一个位不为 1,则该数据一定不存在。布隆过滤器的查询时间复杂度为 O(k),其中 k 为哈希函数的个数。

相同点和不同点

相同点:
它们都存在误判的情况。
例如,使用哈希表时,不同元素的哈希值可能相同,所以这样就产生误判了;
而布隆过滤器的特征是,当布隆过滤器说,某个数据存在时,这个数据可能不存在;当布隆过滤器说,某个数据不存在时,那么这个数据一定不存在

不同点:
存储机制:
哈希表使用一个数组来存储键值对,通过哈希函数将键映射到数组的索引位置,然后将值存储在对应的位置上。
布隆过滤器则使用一个位数组(或位向量),通过多个哈希函数将元素映射到位数组的多个位上。

查询操作:
哈希表在进行查询时,通过计算哈希值来定位键值对的存储位置,然后直接获取对应的值。查询时间复杂度通常为 O(1)。
布隆过滤器在进行查询时,也通过多个哈希函数计算多个位,然后判断对应的位是否都为 1 来确定元素是否存在。查询时间复杂度为 O(k),其中 k 为哈希函数的个数。

内存占用:
哈希表需要根据数据规模来动态调整数组的大小,以保证存储效率。
布隆过滤器在预先设置位数组的大小后,不会随数据规模的增加而增长。因此布隆过滤器更适用于海量数据。

结论:
哈希表和布隆过滤器都能实现判重,但它们都会存在误判的情况,但布隆过滤器存储占用的空间更小,更适合海量数据的判重。

布隆过滤器实现原理:

布隆过滤器的实现:主要依靠的是它数据结构中的一个位数组,每次存储键值的时候,不是直接把数据存储在数据结构中,因为这样太占空间了,它是利用几个不同的无偏哈希函数,把此元素的 hash 值均匀的存储在位数组中,也就是说,每次添加时会通过几个无偏哈希函数算出它的位置,把这些位置设置成 1 就完成了添加操作。
当进行元素判断时,查询此元素的几个哈希位置上的值是否为 1,如果全部为 1,则表示此值存在,如果有一个值为 0,则表示不存在。因为此位置是通过 hash 计算得来的,所以即使这个位置是 1,并不能确定是那个元素把它标识为 1 的,因此布隆过滤器查询此值存在时,此值不一定存在,但查询此值不存在时,此值一定不存在。

并且当位数组存储值比较稀疏的时候,查询的准确率越高,而当位数组存储的值越来越多时,误差也会增大。
位数组和 key 之间的关系,如下图
在这里插入图片描述

如何实现布隆过滤器?

1.通过程序实现(内存级别方案):使用 Google Guava 库实现布隆过滤器。
2.通过中间件实现(支持数据持久化):使用 Redis 4.0 之后提供的布隆过滤插件来实现,它的好处是支持持久化,数据不会丢失。

一、什么是Guava
1)Guava库是一个适合很多Java项目的通用工具库
2)Guava工具库中包含了:集合Collection、并发Concurrency、原语Primitive、反射Reflection、比较Comparison、I/O操作、哈希Hash、网络Networking、字符串String、数学函数Math、缓存Caching、内存中的发布/订阅……以及各种级别的数据类型
3)需要JDK 6以上版本

使用 Google Guava 库实现布隆过滤器总共分为以下两步:

  • 引入 Guava 依赖
  • 使用 Guava API 操作布隆过滤器
    ① 引入 Guava 依赖
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId>
</dependency>

② 使用 Guava API

import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;public class BloomFilterExample {public static void main(String[] args) {// 创建一个布隆过滤器,设置期望插入的数据量为10000,期望的误判率为0.01BloomFilter<String> bloomFilter = BloomFilter.create(Funnels.unencodedCharsFunnel(), 10000, 0.01);// 向布隆过滤器中插入数据bloomFilter.put("data1");bloomFilter.put("data2");bloomFilter.put("data3");// 查询元素是否存在于布隆过滤器中System.out.println(bloomFilter.mightContain("data1")); // trueSystem.out.println(bloomFilter.mightContain("data4")); // false}
}

在上述示例中,我们通过 BloomFilter.create() 方法创建一个布隆过滤器,指定了元素序列化方式、期望插入的数据量和期望的误判率。然后,我们可以使用 put() 方法向布隆过滤器中插入数据,使用 mightContain() 方法来判断元素是否存在于布隆过滤器中。

http://www.ds6.com.cn/news/65484.html

相关文章:

  • 做网站 美国服务器哪里好寄生虫seo教程
  • 龙岩网站开发公司百度推广账号怎么注册
  • 网页设计毕业论文案例seo刷排名软件
  • 扬州网站建设index百度指数
  • 程序员 修电脑 做网站手机网站百度关键词排名查询
  • 制作钓鱼网站教程源码系统优化软件哪个最好的
  • 南平做网站全球十大搜索引擎排名
  • 上不了建设银行网站免费建站网站网页
  • 怎么做网站外贸如何做品牌宣传与推广
  • 东南亚做棋牌网站b2b国际贸易平台
  • 潜江资讯网电脑版seo对网络推广的作用是什么?
  • 拉趣网站是谁做的seo技术教程网
  • 那个网站做贷款的客源真实靠谱的代写平台
  • 广州网站建设吧g3云推广
  • 手机做网站哪家好接推广一般多少钱
  • 重庆seo网站管理app推广接单平台哪个好
  • 网页游戏平台制作百度seo优化推广公司
  • 网站原型是什么上海高端网站建设
  • 网站备案信息怎么做百度电话人工服务
  • 做网站怎么做好的推广方式
  • 建网站需要什么资质汽车营销策划方案ppt
  • 企业网站建设合同百度如何发布作品
  • 做美国代购的都从哪个网站买友情链接的网站有哪些
  • 4大门户网站沧州网站seo公司
  • 网站开发近期市场查看网站流量的工具
  • 做网站现成的测试账号网络培训系统
  • 网站开发费用是无形资产优帮云查询数据云查询
  • 阿里巴巴网站官网长沙seo优化推广公司
  • 做购物平台网站需要注意什么高端网站建设
  • 瓦房店 网站建设seo建站优化推广