`
luliangy
  • 浏览: 96885 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

利用BitMap进行排序

阅读更多

    利用BitMap可以对某些数据进行排序,但是限制条件是必须实现知道数据的范围,而且不能重复,类似于桶排序,但是比桶排序更加节省内存。

 

     原理很简单,就是设置数组某一位的数在BitMap中对应位为1,然后遍历数组就可以得到结果。

这里以100以内的一个数组排序为例

 

例如数组:

int[] array = { 6, 2, 8, 4, 33, 23, 99, 9 };

 

则设置BitMap6(BitMap从第0位开始)1,第2位为1......

 

/**
	 * 利用BitMap进行排序;
	 * @param array
	 */
	public static void bitMapSort(int[] array){
		
		//开辟16个Byte;
		byte[] bs=new byte[16]; 
		for(int i=0;i<array.length;i++){
			//设置array[i]位为1;
			//得到Byte表中的位置;
			int pos=array[i]/8;
			//设置位;
			int index=array[i]%8;
			bs[pos]=(byte) (bs[pos]+(byte)(0x01<<(index)));
		}
		int count=0;
		int num=0;
		//遍历Byte表;
		//考虑设置数组对应位的值;
		for(int i=0;i<bs.length;i++){
			byte b=bs[i];
			for(int j=0;j<8;j++){
				byte bi=(byte) (b&(0x01<<j));
				if(bi!=0){
					num=i*8+j;
					array[count]=num;
					count++;
				}
			}
		}
		
	}

 

<!--EndFragment-->

分享到:
评论

相关推荐

    3-8+BitMap在大数据精准营销中的应用.pdf

    这篇文档主要介绍了如何利用BitMap来处理大规模用户数据,实现高效、精准的营销策略。 1. **项目背景** - 项目涉及到10亿级别的用户账号数据,包括用户ID和设备标识。 - 用户标签数据达到千万级别,涵盖社会属性...

    7. BitMap-小小的身躯蕴含着大大的能量1

    在爬虫系统中,可以将URL通过哈希函数转化为整数,然后利用Bitmap设置这个值。这样,当遇到新的URL时,通过同样的哈希函数计算,查看Bitmap中对应的位是否已设置,就能快速判断URL是否已经抓取过,避免重复请求。...

    位图数据结构在排序算法中的应用.pdf

    归并排序是一种分治算法,它将数据分成较小的两部分进行排序,然后将排序好的两部分合并在一起。归并排序的效率在时间复杂度上是O(nlogn),在空间复杂度上是O(n),因为合并排序需要额外空间用于合并操作。在对大量...

    解析bitmap处理海量数据及其实现方法分析

    Bitmap,也称为位图或位映射,是一种高效的数据结构,它利用二进制位来存储信息,常用于处理大量数据的标记和索引。在处理海量数据时,Bitmap能够节省存储空间,尤其适用于数据范围相对较小而数据量极大的场景。 1....

    易语言-易语言大数据去重复源码 bitmap

    对于有经验的开发者,这个源码可能提供了一种新的思路或优化方法,可以在自己的项目中进行借鉴和改进。 总之,“易语言大数据去重复源码 bitmap”是一个关于如何使用易语言结合位图技术处理大数据重复问题的实例。...

    Android-Android图片选择预览九宫格图片控件拖拽排序九宫格图片控件

    用户选中图片后,通过`EXTRA_DATA`获取图片的URI,然后利用`BitmapFactory`将其解码为`Bitmap`对象进行显示。 接下来是“图片预览”。预览图片一般需要自定义一个`Activity`或者`Fragment`,在这个组件中,可以使用...

    大数据的一些面试题.pdf

    例如,若要在2.5亿个整数中找出不重复的整数数量,可以将所有整数分为2^8个区域,利用bitmap进行存储。对于中位数问题,可以先将数据划分为2^16个区域,然后逐级确定中位数所在的区域。 二、数据库索引 数据库索引...

    C++MFC宿舍管理系统(带图标的按钮,可排序的ListCtrl,文件IO,最小化最大化初学者的良心资源)

    可以自定义一个比较函数,对`CListCtrl`中的`LVITEM`结构体进行比较,然后使用`SortItems`函数进行实际排序。 3. **文件输入/输出(File Input/Output, IO)**:在MFC中,可以使用标准C++库的`fstream`类或者MFC的`...

    大数据处理算法.pdf

    归并排序则通过合并有序子序列来实现整体的有序性,这些排序算法在大数据环境下通常配合外部排序进行大规模数据的处理。 在面试中,这些算法都是常见的问题,尤其在涉及到大数据处理和高并发场景的公司,如腾讯。...

    海量数据处理问题汇总及方法总结

    - 方案2:利用Trie树或哈希映射直接统计所有查询的频率,然后进行排序。 - 方案3:分布式处理,如MapReduce,将数据分散到多台机器上计算,最后合并结果。 3. **最高频词汇统计**: - 通过取模将文件划分为小...

    行业-76当我们在SQL里进行分组的时候,如何才能使用索引?.rar

    下面我们将深入探讨如何在SQL中进行分组并有效利用索引。 首先,理解索引的基本原理是关键。索引是一种数据结构,它为数据库表中的列提供了快速访问的途径。就像书的目录,可以让你快速找到所需的内容,而无需逐页...

    C语言实现的bitmap位图代码分享

    总结起来,这段C语言代码展示了如何利用位图数据结构来高效地处理和存储大量布尔值,以及如何进行位操作(如设置、清除和测试位)。这种技术在索引、数据压缩、内存管理和其他需要快速访问大量状态信息的场景中非常...

    数据结构与算法.xmind

    当递归到规模足够小时,利用插入排序 归并前判断一下是否还有必要归并 只在排序前开辟一次空间 基数(桶)排序 思想 分配,回收(分配到不同的位置上,然后回收)..不断分配..回收来...

    一种采用预排序策略的多核并行skyline算法

    在多核并行skyline算法中,预排序策略通常是在算法开始处理之前对数据集进行排序,以便于后续高效地进行skyline计算。 文章中提到的MPSCS(Multi-core Parallel Skyline Computation based on Sorting)算法,是一...

    海量数据处理

    - **Hash统计**:利用哈希表(HashMap)进行频率统计。 - **堆/快速/归并排序**:对统计结果进行排序,找出最频繁出现的元素。 2. **双层桶划分** - 通过两层哈希的方式进一步细化数据分布,提高处理效率。 3. ...

    数据处理面试题

    6. 分布式处理:利用Hadoop、MapReduce等分布式计算框架进行大规模数据处理,可以有效地利用多台计算机资源进行并行计算。 在实际面试题中,应聘者可能需要针对具体问题,例如如何处理大规模日志文件、如何在大数据...

    Volley。fastJson解析网络Json ,多线程显示图片,简单缓存图片,万能适配器,完美解决图片排序混乱问题,完美解决图片多次加载问题

    综上所述,这个项目展示了如何利用Volley进行网络请求和FastJson解析JSON数据,同时结合多线程和图片缓存技术优化用户体验。万能适配器则使得数据绑定更加灵活,解决了图片排序和加载问题,提升了应用的整体性能。

    用位图排序无重复数据集实例代码(C++版)

    在`bitmapSort()`函数中,首先分配足够的内存来存储位图,然后调用`setAllZero()`初始化位图,接着使用`setBitmap()`函数读取待排序文件并将数据集中的整数对应的位设为1。最后,通过`getSorted()`函数扫描位图,将...

    SQL编写及其优化培训.doc

    可以通过在应用层进行排序,或者在设计阶段通过索引顺序优化来减少排序需求。 ##### 3.5 防止数据类型的隐式转换 隐式类型转换会导致数据库引擎无法有效地使用索引。为了避免这种情况,应确保比较操作中各列的数据...

    oracle 索引

    2. 改善排序和分组操作:利用索引进行排序,避免额外的排序步骤。 3. 加速唯一性检查:在插入数据时,索引能快速检查新值的唯一性。 缺点: 1. 空间消耗:索引需要额外的磁盘空间。 2. 插入和更新性能下降:每次...

Global site tag (gtag.js) - Google Analytics