[原创]大数据:布隆过滤器C#版简单实现。
public class BloomFilter
{
public BitArray _BloomArray;
public Int64 BloomArryLength { get; }
public Int64 DataArrayLeng { get; }
public Int64 BitIndexCount { get; } /// <summary>
/// 初始化
/// </summary>
/// <param name="BloomArryLength">布隆数组的大小</param>
/// <param name="DataArrayLeng">数据的长度</param>
/// <param name="bitIndexCount">hash数</param>
public BloomFilter(int BloomArryLength,int DataArrayLeng,int bitIndexCount)
{
_BloomArray = new BitArray(BloomArryLength);
this.BloomArryLength = BloomArryLength;
this.DataArrayLeng = DataArrayLeng;
this.BitIndexCount = bitIndexCount;
} public void Add(string str)
{
var hashCode = GetHashCode(str);
Random random = new Random(hashCode);
for (int i = ; i < BitIndexCount; i++)
{
var c = random.Next((int)(this.BloomArryLength - ));
_BloomArray[c] = true;
}
} public bool isExist(string str)
{
var hashCode = GetHashCode(str);
Random random = new Random(hashCode);
for (int i = ; i < BitIndexCount; i++)
{
if(!_BloomArray[random.Next((int)(this.BloomArryLength - ))])
{
return false;
}
}
return true;
} public int GetHashCode(object value)
{
return value.GetHashCode();
} public double getFalsePositiveProbability()
{
// (1 - e^(-k * n / m)) ^ k
return Math.Pow(( - Math.Exp(-BitIndexCount * (double)DataArrayLeng / BloomArryLength)),
BitIndexCount);
}
}
static void Main(string[] args)
{
Bloom_Filter.BloomFilter bloom = new Bloom_Filter.BloomFilter(, , );//五千万条数据 for (int i = ; i < bloom.DataArrayLeng; i++)//五千万条数据
{
bloom.Add(i.ToString());
}
do
{
var c = Console.ReadLine();
if (c == "e")
break;
Stopwatch sw = new Stopwatch();
sw.Start();
var temp=bloom.isExist(c);
sw.Stop();
Console.WriteLine($"查找:{c}\n结果:{temp}\n总耗时:{sw.ElapsedTicks}\n错误概率:{bloom.getFalsePositiveProbability()}");
} while (true);
}
结果:使用内存27MB,查找结果一般在100毫秒以内。

[原创]大数据:布隆过滤器C#版简单实现。的更多相关文章
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
- 入门大数据---Hbase 过滤器详解
一.HBase过滤器简介 Hbase 提供了种类丰富的过滤器(filter)来提高数据处理的效率,用户可以通过内置或自定义的过滤器来对数据进行过滤,所有的过滤器都在服务端生效,即谓词下推(predic ...
- C#将dataGridView中显示的数据导出到Excel(大数据量超有用版)
开发中非常多情况下须要将dataGridView控件中显示的数据结果以Excel或者Word的形式导出来,本例就来实现这个功能. 因为从数据库中查找出某些数据列可能不是必需显示出来,在dataGrid ...
- CDH大数据平台搭建终极版
经过无数次的失败,终于将CDH安装到两台普通的笔记本电脑上,主要失败原因有以下几点: 不熟悉安装过程,官方给出的安装方法有三种,所以都尝试了一遍,浪费了大量时间,所以有时候方法多不见得是一件好事. 安 ...
- zw版足彩大数据&报价
zw版足彩大数据&报价 ::zw增强版足彩大数据,文件名后缀是'.dat' ::文件格式是标准文本格式,逗号分隔 ::zw增强版,在标准版赔率基础上,增加了倒数.比率两组归一化数据 ::zw版 ...
- 布隆过滤器(Bloom Filters)的原理及代码实现(Python + Java)
本文介绍了布隆过滤器的概念及变体,这种描述非常适合代码模拟实现.重点在于标准布隆过滤器和计算布隆过滤器,其他的大都在此基础上优化.文末附上了标准布隆过滤器和计算布隆过滤器的代码实现(Java版和Pyt ...
- Redis布隆过滤器与布谷鸟过滤器
大家都知道,在计算机中,IO一直是一个瓶颈,很多框架以及技术甚至硬件都是为了降低IO操作而生,今天聊一聊过滤器,先说一个场景: 我们业务后端涉及数据库,当请求消息查询某些信息时,可能先检查缓存中是否有 ...
- 布隆过滤器的概述及Python实现
布隆过滤器 布隆过滤器是一种概率空间高效的数据结构.它与hashmap非常相似,用于检索一个元素是否在一个集合中.它在检索元素是否存在时,能很好地取舍空间使用率与误报比例.正是由于这个特性,它被称作概 ...
- 浅析布隆过滤器及实现demo
布隆过滤器 布隆过滤器(Bloom Filter)是一种概率空间高效的数据结构.它与hashmap非常相似,用于检索一个元素是否在一个集合中.它在检索元素是否存在时,能很好地取舍空间使用率与误报比例. ...
随机推荐
- nacos作为配置中心
分布式配置中心 在微服务架构中,为什么需要一个统一的配置中心呢?如果用一句话来说那就是方便管理,降低出错的可能.比如:你开发环境是一套配置,测试环境是一套,生产环境又是一套.你如果手动去修改,难免会出 ...
- 关于AI
自己看着办吧 http://tieba.baidu.com/p/6008409988?fr=ala0&pstaala=1&tpl=5&fid=93764&isgod=0
- Windows环境下Anaconda安装TensorFlow的避坑指南
最近群里聊天时经常会提到DL的东西,也有群友在学习mxnet,但听说坑比较多.为了赶上潮流顺便避坑,我果断选择了TensorFlow,然而谁知一上来就掉坑里了…… 我根据网上的安装教程,默认安装了最新 ...
- keras使用
一.pad_sequences from keras.preprocessing.sequence import pad_sequences keras只能接受长度相同的序列输入.因此如果目前序列长度 ...
- Ubuntu屏幕分辨率无1920 1080
xrandr 没有1920X1080分辨率,所以手动添加一个1080P分辨率,先输入“cvt 1920 1080”命令,查询一下1080P分辨率的有效扫描频率 然后 sudo xrandr --new ...
- UE4网络同步属性笔记
GameMode只有服务端有,适合写游戏逻辑.PlayerController每个客户端拥有一个,并拥有主控权.GameState在服务端同步到全端. CLIENT生成的Actor对其有Authori ...
- python epoll方式tcp连接回发消息
# -*- coding:utf-8 -*- import socket import select class testserver(): def __init__(self): self.serv ...
- 2018-2019-2 网络对抗技术 20165337 Exp4 恶意代码分析
1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,sys ...
- Maven - pom中的<repository> <pluginRepositories>
总结: <repository> 允许我们可以在POM中配置其它的远程仓库.这样做的原因有很多,比如你有一个局域网的远程仓库,使用该仓库能大大提高下载速度,继而提高构建速度,也有可能你依赖 ...
- iframe父页面和子页面调用
我在页面中使用iframe标签,有的时候就需要两个页面交互 <iframe id="Iframe" src="{{url('field/user')}}" ...