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

网站建设新的技术方案企业网站建设东莞

网站建设新的技术方案,企业网站建设东莞,机械加工网上怎么接单,wordpress的按装方法文章目录 场景和hashmap的对比 java实现布隆算法第三方类库-guava类库第三方类库-bitset自己用代码实现优势和劣势布隆过滤器如果超过条数限制会怎样 // TODO 这里的布隆不是lol的布隆啊,此布隆非彼布隆。 场景 布隆过滤器适用的场景。 1、key值较长。 2、数据量特…

文章目录

    • 场景
      • 和hashmap的对比
    • java实现布隆算法
      • 第三方类库-guava类库
      • 第三方类库-bitset
      • 自己用代码实现
      • 优势和劣势
        • 布隆过滤器如果超过条数限制会怎样 // TODO

这里的布隆不是lol的布隆啊,此布隆非彼布隆。

场景

布隆过滤器适用的场景。
1、key值较长。
2、数据量特别大。

典型的就是网页url的爬取落库,如何避免(大致避免)重复落库。

和hashmap的对比

肯定会有个疑问,为什么要用布隆过滤器,直接用hashmap不就行吗?
好问题。
数据量不是特别大时,例如100万,用hashmap也是可以的。但是如果是十亿呢?
布隆过滤器占用空间小很多,而且效率高。

主要原因就2个:
1、key值较长时,如url,map存取和检索效率较低(对比布隆算法)。
2、数据量很大时,map占用空间较大(对比布隆算法)。

这篇博客回答的不错。
https://blog.51cto.com/u_14691/6888196

java实现布隆算法

第三方类库-guava类库

引入maven依赖:

<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1.1-jre</version> <!-- 请使用最新版本 -->
</dependency>

代码:

import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;public class BloomFilterExample {public static void main(String[] args) {// 创建一个布隆过滤器,预计会有10000个元素,误判率为3%BloomFilter<Integer> bloomFilter = BloomFilter.create(Funnels.integerFunnel(), 10000, 0.03);// 添加一些元素到布隆过滤器中bloomFilter.put(1);bloomFilter.put(2);// 检查元素是否可能在集合中(可能存在误判)System.out.println(bloomFilter.mightContain(1)); // trueSystem.out.println(bloomFilter.mightContain(3)); // false,除非3也被加入过}
}

第三方类库-bitset

引入maven依赖:

<dependency><groupId>com.bitset</groupId><artifactId>bloomfilter</artifactId><version>1.0.8</version> <!-- 请使用最新版本 -->
</dependency>

代码:

import com.bitset.bloomfilter.*;
import java.util.BitSet;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;public class BloomFilterExample {public static void main(String[] args) {// 创建一个布隆过滤器,预计会有10000个元素,误判率为3%int size = 10000; // 预计元素数量double fpp = 0.03; // 误判率(False Positive Probability)BloomFilter<Integer> bloomFilter = new BloomFilter<>(size, fpp);// 添加一些元素到布隆过滤器中bloomFilter.add(1);bloomFilter.add(2);// 检查元素是否可能在集合中(可能存在误判)System.out.println(bloomFilter.contains(1)); // trueSystem.out.println(bloomFilter.contains(3)); // false,除非3也被加入过}
}

自己用代码实现

网上代码也烂大街了,随便找个,代码:

public class BloomFilter {private BitSet bitSet;private int size;private List<Integer> hashFunctions;public BloomFilter(int expectedElements, double falsePositiveProbability) {size = (int) (-expectedElements * Math.log(falsePositiveProbability) / (Math.log(2) * Math.log(2)));bitSet = new BitSet(size);int numHashFunctions = (int) (size / expectedElements * Math.log(2));hashFunctions = IntStream.range(0, numHashFunctions).map(i -> i * 5 + 3) // 简单的hash函数示例.boxed().collect(Collectors.toList());}public void add(String item) {hashFunctions.forEach(hashFunc -> {int index = Math.abs(hashFunc * item.hashCode() % size);bitSet.set(index);});}public boolean mightContain(String item) {return hashFunctions.stream().allMatch(hashFunc -> {int index = Math.abs(hashFunc * item.hashCode() % size);return bitSet.get(index);});}
}

优势和劣势

布隆过滤器的优势:
布隆过滤器相对于其他数据结构在时空上有巨大优势,占用内存少,查询和插入元素的时间复杂度都是O(k)
可以准确判断元素不存在于布隆过滤器中的场景
散列函数可以独立设计
布隆过滤器不需要存储元素本身,适用于某些数据敏感和数据严格保密的场景

布隆过滤器的劣势:
不能准确判断元素必定存在于布隆过滤器中的场景,存在误判率,在k和m固定的情况下,添加的元素越多,误判率越高
没有存储全量的元素,对于一些准确查询或者准确统计的场景不适用
原生的布隆过滤器无法安全地删除元素

布隆过滤器如果超过条数限制会怎样 // TODO

例如 10个大小 错误因子0.03
如果第11个进来会怎样?

http://www.dtcms.com/a/478948.html

相关文章:

  • SSM管理系统c4ki9(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 珠海正规网站制作排名费用多少无锡阿凡达建设
  • asp网站建设 aws西安高校定制网站建设公司推荐
  • PyTorch 实现 MNIST 手写数字识别完整流程(含数据处理、模型构建与训练可视化)
  • 【Java并发编程】概念与核心问题、线程核心、并发控制、线程池、并发容器、并发问题
  • C++模板编程实战记录:SFINAE核心技术深度掌握
  • Spring Boot项目的常用依赖有哪些?
  • 保姆级教程 | ASE学习过程记录分析
  • 网站如何留言免费网站seo排名优化
  • 运维视角:SpringBootWeb框架全解析
  • Java Redis “运维”面试清单(含超通俗生活案例与深度理解)
  • 【组队学习】Post-training-of-LLMs TASK01
  • 涉县网站网络推广培训哪里好
  • Jenkins自动化配置--CICD流水线
  • 网站建设etw深圳租赁住房和建设局网站
  • 人力网站建设的建议wordpress加百度广告代码出问题
  • Mozilla 项目
  • 今日行情明日机会——20251013
  • 关于解决js中MediaRecorder录制的webm视频没有进度条的问题
  • 红日靶场(二)学习过程详细记录
  • 【多线程】门栓/闭锁(Latch/CountDownLatch)
  • [1-02-02].[第01章:HTML + CSS
  • 手机必备网站软件技术专科生的出路
  • 网站空间续费一年多少钱怎么弄推广广告
  • 一个做任务的网站如何绑定域名wordpress
  • 当ubuntu 系统的IP地址修改之后,gitlab服务应该如何修改?
  • 怎么做自己的公司网站本地服务器 wordpress
  • 网站制作 优帮云做淘宝客网站需要做后台吗
  • xsync.sh分发脚本和命令执行脚本
  • 深圳高端网站设计公司大连网站建设免费