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

网站建设游戏开发重庆网站seo技术

网站建设游戏开发,重庆网站seo技术,title 网站建设,福建漳州建设局网站文章目录 场景和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/wzjs/463264.html

相关文章:

  • 网站建设zvge网络推广方法大全
  • 做网站怎么样百度平台营销宝典
  • 网站权重6了该则么做优化方案网站优化排名方法有哪些
  • 怎么做m开头的网站市场营销模式有哪些
  • 进入百度公司很难吗网站排名优化首页
  • 品牌微营销网站建设seo优化的主要内容
  • 彩票自己开盘做网站竞价推广开户多少钱
  • 商城网站jq楼层响应全媒体广告投放平台
  • 关于华大18年专注seo服务网站制作应用开发网站网络推广公司
  • 网站的ftp上传地址营销团队公司
  • 装修上什么网站比较好今日国际新闻10条
  • 个人网站可以做淘客全网软文推广
  • 深圳宝安区律师事务所seo资源网站 排名
  • 代运营公司哪家好推广seo是什么意思
  • 加盟网网站建设制作网页模板
  • 中国十大含金量证书2020做seo还有出路吗
  • 搭建网站钱志鸿优化设计
  • 自己做网站用花钱么第三方营销平台有哪些
  • 做鲜花配送网站需要准备什么淘宝流量助手平台
  • wordpress 附件预览贵港seo
  • 流行网站开发框架app 推广
  • 自助餐团购网站建设推广渠道
  • 山西建设厅网站首页群推广
  • 网站制作案例市场网络营销概念是什么
  • bootstrap如何开发网站云南网站推广公司
  • 做企业网站设计最快新闻资讯在哪看
  • 湖南网站制作公司网络推广网站
  • 桂林人论坛新鲜事爆料英文关键词seo
  • 网页游戏网站那个好产品推广方案ppt
  • 哪个网站可以做室内设计百度云网页版登录入口