运用简单的bloomfilter算法生成100万个不重复的随机数
来源:互联网 发布:淘宝直通车没有展现 编辑:程序博客网 时间:2024/06/05 14:55
本文中只是简单的体会bloomFilter算法的基本原理,设计实现一个生成100万个不重复的随机数。
选择3个分布均匀质数,在这里面质数的选择还是挺有讲究的,要注意不能太小,必须能够满足bloomfilter空间,不然整个空间都是1了还没有找到100万个不重复的随机数。不多说,上代码。
#include<stdio.h>#include<stdlib.h>#include<time.h>#include<cstdbool>#define MAXNUM 10000000int hash_fuction(int dst, int select_number){ return dst % select_number;}int * byte_bloomfilter_random(int generate_number, int maxValue){ int temp; char * bloomfilter; int *dst; bool flag; int index_a, index_b, index_c; char diff_a, diff_b, diff_c; bloomfilter = (char *)malloc((size_t)MAXNUM / 8 * sizeof(char)); dst = (int *)malloc((size_t)generate_number * sizeof(int)); for (int i = 0; i < MAXNUM / 8; i++) { bloomfilter[i] = 0; } for (int i = 0; i < generate_number; i++) { flag = true; while (flag) { int temp_a, temp_b, temp_c; char bit_a, bit_b, bit_c; temp = rand() * rand() % maxValue; //select 3 prime numbers and select 3 hash functions temp_a = hash_fuction(temp, 524287); temp_b = hash_fuction(temp, 1046527); temp_c = hash_fuction(temp, 3967); index_a = temp_a >> 3; diff_a = temp_a % 8; index_b = temp_b >> 3; diff_b = temp_b % 8; index_c = temp_c >> 3; diff_c = temp_c % 8; bit_a = bloomfilter[index_a] & (1 << diff_a); bit_b = bloomfilter[index_b] & (1 << diff_b); bit_c = bloomfilter[index_c] & (1 << diff_c); if (!bit_a || !bit_b || !bit_c) { dst[i] = temp; bloomfilter[index_a] = bloomfilter[index_a] | (1 << diff_a); bloomfilter[index_b] = bloomfilter[index_b] | (1 << diff_b); bloomfilter[index_c] = bloomfilter[index_c] | (1 << diff_c); flag = false; } } } free(bloomfilter); return dst;}
1 0
- 运用简单的bloomfilter算法生成100万个不重复的随机数
- 随机生成不重复的随机数的简单算法
- 简单的生成不重复随机数
- 生成不重复随机数的一种算法
- 生成不重复随机数的一种算法。
- 生成不重复随机数的算法
- 生成不重复随机数的一种算法
- C#生成100%不重复的随机数
- 生成1-100不重复的随机数
- 生成不重复的随机数的高效的算法
- 生成不重复的随机数
- 生成无重复的随机数
- 生成不重复的随机数
- 生成无重复的随机数
- 生成不重复的随机数
- 生成不重复的随机数
- 生成不重复的随机数
- 生成无重复的随机数
- exclipse运行时出现skipping错误的解决方法
- 在VS中使用Boost库出现Macro redefinition错误的解决方法(warning C4005)
- 美游客猛增 中国在纽约推介新“丝绸之路”旅游
- ios-phonegap
- oracle数据库基本理解
- 运用简单的bloomfilter算法生成100万个不重复的随机数
- 《快学Scala》第3章 数组相关操作 练习
- 《高性能javascript编程》读书笔记
- MAC下如何配置Android手机调试(将测试手机加入到Mac系统的调试列表中)
- 单片机 按钮——1
- USB 3.0的LFPS原理
- 静态loaddll的函数改成动态加载,小工具把大量的导出函数处理下
- 智能家居APP开发
- Oracle数据库系统视图USER_TAB_COLS和USER_TAB_COLUMNS的区别