问题描述:

      BitMap排序思想:

            用1bit位标记某个元素对应的值

      优点:

            效率高,不允许进行比较和移位

            占用内存少,比如32个整数,使用bit存储需要4byte,使用int数组需要32*4byte

     缺点:

           无法对重复数据进行排序和查找

    应用场景:

                ①:对10亿个不重复的整数进行排序。

                ②:找出10亿个数字中重复的数字。

 

算法实现:

/*
* BitMap算法
* 思想:
* 用1bit位来标记某个元素对应的value,而key即是该元素。
*
* 优点:
* 效率高,不允许进行比较和移位
* 占用内存少,比如32个整数,使用bit存储需要4byte数据存储,使用数组需要32byte
*
* 缺点:
* 无法对重复的数据进行排序和查找
*/ #ifndef BitMap_H
#define BitMap_H using std::cout;
using std::endl; #define ByteLength 8 //返回数组元素中的最大值
int getMax(int* array,int size)
{
int max=array[0];
for (int i=1;i<size;i++)
max=array[i]>max?array[i]:max;
return max;
} //返回存储数组需要的byte个数
int getByteCount(int* array,int size)
{
int max=getMax(array,size);
int byteCount=max/ByteLength+1; //BitMap存储该数组需要byteCount个字节
return byteCount;
} //返回存储整数对应的byte索引
int index(int data)
{
return data/ByteLength;
} //返回存储整数对应的byte偏移
int shift(int data)
{
return data%ByteLength;
} //BitMap排序
void bitmapSort(int* array,char* byteArray,int size)
{
int j=0;
int k=0;
for (int i=0;i<size;i++)
{
j=index(array[i]);
k=shift(array[i]);
byteArray[j] |= (char)(k>0?(1<<k):0); //注意k为0的情况
}
} //输出byte位为1时对应的值
void getValue(char data,int index)
{
if (data & 0x1==0) //data为0的情况
{
cout<<index*ByteLength<<"\t";
} for (int i=0;i<ByteLength;i++)
{
if (data & (char)(1<<i))
cout<<index*ByteLength+i<<"\t";
}
} //输出排序后的数组
void print(char* array,int size)
{
int count=0;
for (int i=0;i<size;i++)
{
if (count>0 && count%10==0)
cout<<endl; if (array[i]==0)
{
continue;
}
else
{
getValue(array[i],i);
count++;
}
}
cout<<endl;
} #endif

BitMap排序的更多相关文章

  1. bitmap对海量无重复的整数排序--转

    原文地址:http://blog.csdn.net/u013074465/article/details/46956295 现在有n个无重复的正整数(n 小于10的7次方),如果内存限制在1.5M以内 ...

  2. 大数据排序算法:外部排序,bitmap算法;大数据去重算法:hash算法,bitmap算法

    外部排序算法相关:主要用到归并排序,堆排序,桶排序,重点是先分成不同的块,然后从每个块中找到最小值写入磁盘,分析过程可以看看http://blog.csdn.net/jeason29/article/ ...

  3. 经典算法题每日演练——第十一题 Bitmap算法

    原文:经典算法题每日演练--第十一题 Bitmap算法 在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美, 但是在特定的场 ...

  4. 经典算法题每日演练——第十一题 Bitmap算法 (转)

    http://www.cnblogs.com/huangxincheng/archive/2012/12/06/2804756.html 在所有具有性能优化的数据结构中,我想大家使用最多的就是hash ...

  5. BitMap算法及其实现(Python)

    BitMap概述 本文介绍 BitMap 算法的应用背景,算法思想和相关实现细节. 概括而言,BitMap 主要用来解决海量数据中元素查询,去重.以及排序等问题.这里对海量数据场景的强调,似乎暗示了这 ...

  6. Android拼图游戏的设计逻辑,从切图到交互动画,从关卡到倒计时,实例提高!

    Android拼图游戏的设计逻辑,从切图到交互动画,从关卡到倒计时,实例提高! 群英传的最后一章,我大致的看了一下这个例子,发现鸿洋大神也做过,就参考两个人的设计逻辑,感觉都差不多,就这样实现起来了 ...

  7. 算法——001BitMap(位图)算法

    哈希表在查找定位操作上具有O(1)的常量时间,常用于做性能优化,但是内存毕竟是有限的,当数据量太大时用哈希表就会内存溢出了.而考虑对这些大数据进行存盘分批处理又有IO上的开销,性能又不能满足要求.这个 ...

  8. PHP实现 bitmap 位图排序 求交集

    2014年12月16日 17:15:09 初始化一串全为0的二进制; 现有一串无序的整数数组; 如果整数x在这个整数数组当中,就将二进制串的第x位置为1; 然后顺序读取这个二进制串,并将为1的位转换成 ...

  9. BitMap算法 .net实现 用于去重并且排序,适用于大型权限管理 ,大数据去重排序

    BitMap利用byte特性 针对排序+去重  最佳实践: 100万条数据的排序+去重用时200毫秒左右 static void Main(string[] args) { ]; /*alias*/ ...

随机推荐

  1. JS中的集中页面跳转的方法

    第一种:    <script language="javascript" type="text/javascript">           wi ...

  2. 多分类问题multicalss classification

    多分类问题:有N个类别C1,C2,...,Cn,多分类学习的基本思路是"拆解法",即将多分类任务拆分为若干个而分类任务求解,最经典的拆分策略是:"一对一",&q ...

  3. 第十一章 管理类型(In .net4.5) 之 管理对象的生命周期

    1. 概述 本章内容包括 管理非托管资源.使用IDisposable接口 以及 管理析构器和垃圾回收. 2. 主要内容 2.1 理解垃圾回收机制 ① 代码执行的时候,内存中有两个地方存放数据项:堆 和 ...

  4. python 遍历文件夹

    import os import os.path rootdir = “d:\data” # 指明被遍历的文件夹 for parent,dirnames,filenames in os.walk(ro ...

  5. SQL Server 一些关键字详解(一)

    1.CROSS APPLY 和OUTER APPLY MSDN解释如下(个人理解不是很清晰): 使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数.表值函数作为右输入,外 ...

  6. Microsoft Azure 的一些限制 Global

    Azure Subscription and Service Limits, Quotas, and Constraints http://azure.microsoft.com/en-us/docu ...

  7. hdu 5112 A Curious Matt

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5112 A Curious Matt Description There is a curious ma ...

  8. Android 创建单例模式的几种方法

    java模式之单例模式:单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例.特点:1,一个类只能有一个实例2,自己创建这个实例3,整个系统都要使用这个实例 Singleton模式 ...

  9. 解决vs2013不能添加控制器的步骤

    点击:vs2013 更新,更新完以后,再重启下电脑就可以正常使用了

  10. [转]Cygwin的包管理器:apt-cyg

    [转]Cygwin的包管理器:apt-cyg http://zengrong.net/post/1792.htm Cygwin的包管理工具setup.exe实在是难用的让人蛋碎.于是就有了这样一个ap ...