BitMap算法 .net实现 用于去重并且排序,适用于大型权限管理 ,大数据去重排序
BitMap利用byte特性 针对排序+去重 最佳实践: 100万条数据的排序+去重用时200毫秒左右
static void Main(string[] args)
{
int[] data = new int[];
/*alias*/
Random r = new Random();
for (int i = ; i < data.Length; i++)
{
data[i] = r.Next(, );
}
Stopwatch stop = new Stopwatch();
stop.Start();
List<byte> lstbyte = new List<byte>();
foreach (var item in data)
{
int unit = item / ;
int index = item % ;
if (lstbyte.Count <= unit)
{
lstbyte.AddRange(new byte[unit-lstbyte.Count + ]);
}
lstbyte[unit] = set_bit(lstbyte[unit], index + , true);
}
List<int> result = new List<int>();
for (int i = ; i < lstbyte.Count; i++)
{
int currentIndex = i*;
List<int> lstint = new List<int>();
if (lstbyte[i] > )
{
/**
* 这段代码用于判断,byte对应位置的值是否有1
* 例如: 目标 byte:0010 0001
* 0010 0001 & 0000 0001 结果为1则 第一位为1
* 第二位比较方式就是目标byte和 0010 0001 & 0000 0010
* 为避免频繁的装箱拆箱操作,这里不用通过 Math.Pow计算平2的平方立方来得到目标比较数。
*/
int b = lstbyte[i] & 0x01;
if (b == )
{
lstint.Add(currentIndex+);
}
b = lstbyte[i] & 0x02;
if (b == )
{
lstint.Add(currentIndex + );
}
b = lstbyte[i] & 0x04;
if (b == )
{
lstint.Add(currentIndex + );
}
b = lstbyte[i] & 0x08;
if (b == )
{
lstint.Add(currentIndex + );
}
b = lstbyte[i] & 0x10;
if (b == )
{
lstint.Add(currentIndex + );
}
b = lstbyte[i] & 0x20;
if (b == )
{
lstint.Add(currentIndex + );
}
b = lstbyte[i] & 0x40;
if (b == )
{
lstint.Add(currentIndex + );
}
b = lstbyte[i] & 0x80;
if (b == )
{
lstint.Add(currentIndex + );
}
}
result.AddRange(lstint);
}
stop.Stop();
Console.WriteLine("结果数:"+result.Count);
//foreach (var item in result)
//{
// Console.WriteLine(item);
//}
Console.WriteLine(string.Concat("时间:" ,stop.ElapsedMilliseconds ,"毫秒"));
Console.ReadKey();
}
/// <summary>
/// 设置某一位的值
/// </summary>
/// <param name="data"></param>
/// <param name="index">要设置的位, 值从低到高为 1-8</param>
/// <param name="flag">要设置的值 true / false</param>
/// <returns></returns>
static byte set_bit(byte data, int index, bool flag)
{
if (index > || index < )
throw new ArgumentOutOfRangeException();
int v = index < ? index : ( << (index - ));
return flag ? (byte)(data | v) : (byte)(data & ~v);
}
运行速度和待排序去重的最大数的大小有关系
BitMap算法 .net实现 用于去重并且排序,适用于大型权限管理 ,大数据去重排序的更多相关文章
- 大数据排序算法:外部排序,bitmap算法;大数据去重算法:hash算法,bitmap算法
外部排序算法相关:主要用到归并排序,堆排序,桶排序,重点是先分成不同的块,然后从每个块中找到最小值写入磁盘,分析过程可以看看http://blog.csdn.net/jeason29/article/ ...
- 大数据去重(data deduplication)方案
数据去重(data deduplication)是大数据领域司空见惯的问题了.除了统计UV等传统用法之外,去重的意义更在于消除不可靠数据源产生的脏数据--即重复上报数据或重复投递数据的影响,使计算产生 ...
- SAP ABAP将大数据量排序后输入到内表
要向内表读入3百50万条数据,如果一次读入就会产生运行错误,错误提示为,没有内存对于扩展 内表. 我考虑使用SELECT...INTO TABLE...PACKAGE SIZE 和ENDSELECT来 ...
- mysql排序,可以对统计的数据进行排序
sql SELECT a.*,b.name as address_name,b.tel as address_tel,b.province as address_province,b.city as ...
- java数组排序问题:array.sort()是从小到大排序,那么如何从大到小排序?
别告诉我从i=a.length开始打印然后i--!因为数组没变啊,只是打印顺序变了.有木有啥别的方法,除了冒泡插入选择.. nteger [] array=new Integer[]{1,2,3,4, ...
- php 大数据量及海量数据处理算法总结
下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题.下面的一些问题基本直接来源于公司的面试笔试题目, ...
- 大数据算法->推荐系统常用算法之基于内容的推荐系统算法
港真,自己一直非常希望做算法工程师,所以自己现在开始对现在常用的大数据算法进行不断地学习,今天了解到的算法,就是我们生活中无处不在的推荐系统算法. 其实,向别人推荐商品是一个很常见的现象,比如我用了一 ...
- 大数据list去重
MaxList模块主要是对Java集合大数据去重的相关介绍. 背景: 最近在项目中遇到了List集合中的数据要去重,大概一个2500万的数据,开始存储在List中,需要跟一个2万的List去去重. 直 ...
- List<Map>中根据map的同一指标项数据——去重代码
先看网络上,博客经常出现的错误代码: for(ABatchAddCheckVO aBatchAddCheckVO : addList){ dto.put("aac001",aBat ...
随机推荐
- Android BitmapFactory.decodeFile(filePath, options) 返回 Null 6.0权限
今天在做拍照上传的时候遇到个问题,根据路径获取Bitmap 失败,一直返回空,以为这个路径获取Bitmap代码久经考验,不怀疑它,找参数传入是否正确,初步怀疑是 filePath 没传进去,打印 fi ...
- Bmob使用心得
1.在 Project 的 build.gradle 文件中添加 Bmob的maven仓库地址,示例如下:(注意文字说明部分): allprojects { repositories { jcente ...
- shiro 通过jdbc连接数据库
本文介绍shiro通过jdbc连接数据库,连接池采用阿里巴巴的druid的连接池 参考文档:https://www.w3cschool.cn/shiro/xgj31if4.html https://w ...
- [转]Android开发要看的网站(不断更新中)
Android网址或Blog Android官网 身为Android开发者不知道这个网站就太说不过去了,上面有你任何你需要的东西 Android Developers Blog Android官网博客 ...
- select 1浅析
今天看到项目代码里有这条语句,不懂select 1 from XXXXXXX里的1是何意,查了一番才知道: 1.select 1 from mytable;与select anycol(目的表集合中的 ...
- Java MVC框架性能比较
Java MVC框架性能比较 - by zvane 现在各种MVC框架很多,各框架的优缺点网络上也有很多的参考文章,但介绍各框架性能方面差别的文章却不多,本人在项目开发中,感觉到采用了struts2框 ...
- Node.js——body方式提交数据
引入核心模块 http,利用其 api(http.createServer) 返回一个 http.server 实例,这个实例是继承于net.Server,net.Server 也是通过net.cre ...
- 乐视max2 刷入第三方recovery 然后刷入root 包 root
乐视max2 刷入第三方recovery 然后刷入root 包 root 第三方recovery:为奇兔 刷入root 包 https://share.weiyun.com/ddcdd5ea83956 ...
- 20面向对象三特征 之继承 方法重写 super
继承是:多个类有重复内容,把重复内容放到一个新类中,就可以通过extends关键词去让原来的类和新类产生继承关系,子类只能拿到父类一部分信息.通过extends关键词去指明类与类之间的关系,一个父类可 ...
- 瀑布流布局js
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...