`

位图(bitmap)排序

阅读更多
放假之前从图书馆借来《编程珠玑》,开篇便把我震住,作者以位图排序优雅地解决了一个现实问题:
有3000万个没有重复的电话号码,1M内存,外存比较充裕,需要将这3000万个电话排序
借此作者引出了位图排序:
位图排序是指以一个N位长的串,每位上以“1”或“0”表示需要排序的集合(后简称“集合”)中的数。比如集合为{2,7,4,9,1,10},则生成一个10位的串,将第2、7、4、9、1、10位置为“1”,其余位置为“0”,这样当把串中所有位都置完后,排序也自动完成了(因为串的下标是有序的):1101001011
位图排序的代码如下:

public void bitmapSort(int[] set){
  
int max=max(set);
  
int[] array=new int[max];
  
  
for(int i=0;i<array.length;i++)
    array[i]
=0;

  
for(int i=0;i<set.length;i++)
    array[
set[i]]=1;

  
for(int i=0;i<array.length;i++){
    
if(array[i]==1)
      System.
out.println(i+” ”);
  }

}


private int max(int[] set){
  
// return the maxium integer of the set
}


可以看出,位图排序的时间复杂度是O(n)的,比一般的排序都快,但它是以空间换时间(需要一个N位的串),而且有一些限制,比如排序前集合大小最好已知,而且集合中元素的最大重复次数必须已知,最好是稠集数据(不然空间浪费很大)。
分享到:
评论

相关推荐

    c# 实现位图算法(BitMap)

    C# 实现位图算法(BitMap) 位图算法(BitMap)是一种高效的数据结构,主要用于快速查询和存储大规模数据。下面将详细介绍 C# 中如何实现位图算法(BitMap)。 什么是 BitMap BitMap 的基本思想就是用一个 bit 位...

    PHP实现bitmap位图排序与求交集的方法

    在探讨PHP实现bitmap位图排序与求交集的方法之前,我们需要先了解几个基础概念。位图(Bitmap)是一种数据结构,用来将大量的数据存储为简单的0和1的位组合,以此来节省存储空间和提高效率。位图排序主要是将位图...

    Bitmap格式说明文档

    颜色表中的颜色按重要性排序,以便在无法显示位图所有颜色的设备上渲染位图。 三、Bitmap文件头 Bitmap文件头是一个BITMAPFILEHEADER结构体,包含关于设备独立位图文件的类型、大小和布局信息。 四、Bitmap信息头 ...

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

    2. 位图排序(BitMap Sort): 位图排序,也被称为神奇排序,是一种内存消耗极低、速度极快的排序方法。位图排序利用位图数据结构来处理排序问题。位图是长度固定的二进制串,每一位对应于数据集合中的一个可能值。...

    C#实现bitmap 高效地排序 标记存储

    C#实现bitmap 高效地排序 标记存储

    海量数据去重排序bitmap(位图法)在java中实现的两种方法

    海量数据去重排序bitmap(位图法)在java中实现的两种方法 海量数据去重排序是指在大量数据中找到重复出现的元素或去除重复出现的元素,这种问题在面试中经常被考察。针对这种问题,一种常用的解决方法是使用位图法。...

    Bitmap Colour Shading_sort9op_period7ai_bitmap_

    "Bitmap Colour Shading_sort9op_period7ai_bitmap_" 这个标题暗示我们正在讨论一个与位图(Bitmap)相关的色彩着色程序或者算法,其中"sort9op"可能代表某种排序或操作流程,"period7ai"可能涉及周期性或者人工智能...

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

    一、主要思想位图排序的思想就是在内存中申请一块连续的空间作为位图,初始时将位图的每一位都置为0,然后依次读取待排序文件的整数,将整数所在的位设置为1,最后扫描位图,如果某一位为1,则说明这个数存在,输出...

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

    位图(Bitmap)是一种在计算机科学中用于存储和处理数据的有效方式,特别是在处理大量布尔值或需要高效查找、设置和清除单个元素时。在C语言中,我们可以使用数组来模拟位图,其中每个数组元素代表一个固定长度的二...

    RGB数据生成BMP位图(其中包括RGB数组随机生成)

    BMP(Bitmap)则是一种常见的位图文件格式,它存储的是未经压缩的像素数据,可以直接由操作系统或图形软件读取并显示。 生成BMP位图首先需要理解其文件结构。BMP文件通常包含一个文件头、一个信息头和像素数据。...

    寻找位图中出现频次最多的颜色

    在图像处理领域,有时我们需要分析位图(Bitmap)中的颜色分布,找出最常出现的颜色,这一过程称为“颜色直方图”分析。本主题将深入探讨如何使用不同的算法和技术来解决这个问题,包括位图的基本概念、颜色表示法、...

    BMP位图转换AVI视频例程

    BMP(Bitmap)是一种常见的位图格式,而AVI(Audio Video Interleave)则是一种广泛使用的视频容器格式。将BMP图像序列转换成AVI视频涉及到图像编码、帧率设置、音频处理等多个关键知识点。 1. **BMP位图格式**:...

    CtrlList排序以及显示排序箭头

    在Windows编程中,CtrlList控件通常指...4. 确保资源文件中包含必要的位图资源,并在代码中正确引用。 以上就是关于“CtrlList排序以及显示排序箭头”的详细知识点,希望对你理解和实现CListCtrl的排序功能有所帮助。

    BMP(全称Bitmap)详细结构

    像素数据按行存储,每一行像素从左至右排序,但是整张图片的数据是从底部向上存储的。此外,为了使每行数据的长度是4的倍数,有时需要在行尾填充额外的字节(通常是0)。对于真彩色图像(24位),每个像素由3个字节...

    BtreeVsBitMapIndex:Btree 与 BitMap 索引的比较

    本文将深入探讨两种常见的索引结构:B树(Btree)和位图索引(Bitmap Index),并对比它们的特性和适用场景。 首先,我们来了解B树。B树是一种自平衡的多路搜索树,适用于大量数据的存储系统。它的每个节点可以有多...

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

    本压缩包文件包含的“易语言大数据去重复源码 bitmap”是一个易语言编写的程序,主要用于处理大数据集中的重复数据问题,同时结合了位图(Bitmap)技术,这在某些特定场景下能提高处理效率。 大数据去重复是数据...

    位图索引与 B-tree 索引:选择与时间

    **位图索引**(Bitmap Index)是一种特殊类型的索引,它使用位图来表示数据。每个位对应数据库表中的一个特定值,如果某个记录包含这个值,那么相应的位就被设置为1,否则为0。例如,如果表中有100万行,有三个不同...

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

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

Global site tag (gtag.js) - Google Analytics