标签:C# ++ random 布隆 var int BloomArrayLength 过滤器 public
using System; using System.Collections; using System.Collections.Generic; using System.Text; namespace UserCheckDemo { public class BloomFilter { public BitArray _bloomArray; public Int64 BloomArrayLength { get; } public Int64 BitIndexCount { get; } public Int64 _numberOfHashed; public BloomFilter(int BloomArrayLength, int bitIndexCount) { _bloomArray = new BitArray(BloomArrayLength); this.BloomArrayLength = BloomArrayLength; this.BitIndexCount = bitIndexCount; } public void Add(string str) { var hashCode = GetHashCode(str); Random random = new Random(hashCode); for (int i = 0; i < BitIndexCount; i++) { var ss = (int)(this.BloomArrayLength - 1); var c = random.Next(ss); _bloomArray[c] = true; } } public bool IsExist(string str) { var hashCode = GetHashCode(str); Random random = new Random(hashCode); for (int i = 0; i < BitIndexCount; i++) { var s = random.Next((int)(this.BloomArrayLength - 1)); if (!_bloomArray[s]) { return false; } } return true; } public int GetHashCode(object value) { return value.GetHashCode(); } /// <summary> /// 计算基本布隆过滤器散列的最佳数量 /// </summary> /// <param name="bitSize"></param> /// <param name="setSize"></param> /// <returns></returns> public int OptionalNumberHashes(int bitSize, int setSize) { return (int)Math.Ceiling((bitSize / setSize) * Math.Log(2.0)); } } }
BloomFilter bf = new BloomFilter(1000000, 3); int errorCount = 0; for (int i = 0; i < 100000; i++) { bf.Add($"key{i}"); } for (int i = 10000; i < 12000; i++) { if (bf.IsExist($"key{i}")) errorCount++; }
标签:C#,++,random,布隆,var,int,BloomArrayLength,过滤器,public 来源: https://www.cnblogs.com/helloworld-wang/p/15133307.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。