美文网首页
常见算法扩展链接

常见算法扩展链接

作者: 农夫_三拳 | 来源:发表于2024-01-29 14:27 被阅读0次
  1. 布隆过滤器
    三、布隆过滤器实战
    布隆过滤器有很多实现和优化,由 Google 开发著名的 Guava 库就提供了布隆过滤器(Bloom Filter)的实现。在基于 Maven 的 Java 项目中要使用 Guava 提供的布隆过滤器,只需要引入以下坐标:
<dependency>
   <groupId>com.google.guava</groupId>
   <artifactId>guava</artifactId>
   <version>28.0-jre</version>
</dependency>

在导入 Guava 库后,我们新建一个 BloomFilterDemo 类,在 main 方法中我们通过 BloomFilter.create 方法来创建一个布隆过滤器,接着我们初始化 1 百万条数据到过滤器中,然后在原有的基础上增加 10000 条数据并判断这些数据是否存在布隆过滤器中:

import com.google.common.base.Charsets;
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;

public class BloomFilterDemo {
    public static void main(String[] args) {
        int total = 1000000; // 总数量
        BloomFilter<CharSequence> bf = 
          BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8), total);
        // 初始化 1000000 条数据到过滤器中
        for (int i = 0; i < total; i++) {
            bf.put("" + i);
        }
        // 判断值是否存在过滤器中
        int count = 0;
        for (int i = 0; i < total + 10000; i++) {
            if (bf.mightContain("" + i)) {
                count++;
            }
        }
        System.out.println("已匹配数量 " + count);
    }
}

当以上代码运行后,控制台会输出以下结果:

已匹配数量 1000309
很明显以上的输出结果已经出现了误报,因为相比预期的结果多了 309 个元素,误判率为:

309/(1000000 + 10000) * 100 ≈ 0.030594059405940593

如果要提高匹配精度的话,我们可以在创建布隆过滤器的时候设置误判率 fpp:

BloomFilter<CharSequence> bf = BloomFilter.create(
  Funnels.stringFunnel(Charsets.UTF_8), total, 0.0002
);
在 BloomFilter 内部,误判率 fpp 的默认值是 0.03:

// com/google/common/hash/BloomFilter.class
public static <T> BloomFilter<T> create(Funnel<? super T> funnel, long expectedInsertions) {
  return create(funnel, expectedInsertions, 0.03D);
}
在重新设置误判率为 0.0002 之后,我们重新运行程序,这时控制台会输出以下结果:

已匹配数量 1000003
通过观察以上的结果,可知误判率 fpp 的值越小,匹配的精度越高。当减少误判率 fpp 的值,需要的存储空间也越大,所以在实际使用过程中需要在误判率和存储空间之间做个权衡。

参考链接:

https://zhuanlan.zhihu.com/p/94433082
  1. 字符串匹配(KMP算法)
https://blog.csdn.net/dark_cy/article/details/88698736
  1. 贪心算法
https://blog.csdn.net/effective_coder/article/details/8736718
https://www.cnblogs.com/xsyfl/p/6938642.html

相关文章

  • 扩展欧几里得算法

    扩展欧几里得算法(Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展...

  • 扩展欧几里得算法

    资料 欧几里得算法 扩展欧几里得算法 扩展欧几里得算法应用 欧几里得算法 欧几里得算法用于求两个数的最大公约数 证...

  • 算法学习(2)----丢番图方程

    之前一篇随笔"算法学习(1)----扩展欧几里得算法"记录了对朴素欧几里得算法和扩展欧几里得算法的学习和认识...

  • Who said javascript was easy ?

    Who said javascript was easy ? 谁说JavaScript容易?扩展链接扩展链接 He...

  • Share-Raft 一致性算法论文译文

    文章链接 寻找一种易于理解的一致性算法(扩展版) 观点分享 Raft 是一种为了管理复制日志的一致性算法。raft...

  • PHP 扩展 链接

    curl 模拟登陆 保存cookie 使用cookie文件 进行登录地址 :https://www.cnblogs...

  • 复习之路

    总共分为五大部分: 论文细节及其扩展的深度学习知识 项目细节 机器学习基础知识 算法题(手撕代码) Linux常见...

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • 算法——常见算法

    记录算法,三篇文章,持续更新,文章本意只是为了方便本人日后查看,如需转载请注明出处 算法——常见算法记录[http...

  • 头条号内容如何给公众号导流(不断总结更新)

    1、头条号扩展链接添加公众号文章链接 在头条号扩展链接添加公众号文章的链接,则在前端显示的时候,就会显示“了解更多...

网友评论

      本文标题:常见算法扩展链接

      本文链接:https://www.haomeiwen.com/subject/tuwgodtx.html