`

位图(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位的串),而且有一些限制,比如排序前集合大小最好已知,而且集合中元素的最大重复次数必须已知,最好是稠集数据(不然空间浪费很大)。
分享到:
评论

相关推荐

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

    本文实例讲述了PHP实现bitmap位图排序求交集的方法。分享给大家供大家参考,具体如下: 初始化一串全为0的二进制; 现有一串无序的整数数组; 如果整数x在这个整数数组当中,就将二进制串的第x位置为1; 然后顺序读取这...

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

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

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

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

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

    今天小编就为大家分享一篇关于海量数据去重排序bitmap(位图法)在java中实现的两种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    bitmap_set_index:Oracle 数据库中的分层位图实现,用于基于集合的数据比较

    #基于集合的分层位图索引Oracle 中基于集合的分层位图索引实现,用于基于集合的操作。 该项目的目的是提供一个基于集合的运算符和索引,为基于集合的比较查询提供简单的语法和巨大的性能提升。 使用基于集合的比较的...

    数据结构与算法.xmind

    BitMap 位图算法 BloomFilter 布隆过滤器 线性表 栈 先进后出(LIFO, Last In First Out) 实现 用两个指针域分别指向栈顶和栈底 常见操作 进栈 栈顶本来指向的节点交由新节点来指向 ...

    基于java开发的美食社交APP后台源码+项目源码.zip

    签到功能 Bitmap、String SETBIT、GETBIT、BITCOUNT、BITFIELD 位图存储食客签到信息 积分排行榜 Sorted Set ZINCRBY、ZREVRANK、ZREVRANGE 存储食客总积分集合方便排序 附近的人 Geo、Sorted Set GEOADD、GEOREDIUS...

    海量数据库解决方案_韩国_李华植

    3.2.4 位图(bitmap)执行计划175 3.2.4.1 各种条件运算符的位图执行计划176 3.2.4.2 子查询执行计划182 3.2.4.3 与b-tree索引相结合的执行计划184 3.2.5 其他特殊处理的执行计划185 3.2.5.1 递归展开(recursive ...

    海量数据库解决方案_韩国_李华植_Part02

    3.2.4 位图(bitmap)执行计划175 3.2.4.1 各种条件运算符的位图执行计划176 3.2.4.2 子查询执行计划182 3.2.4.3 与b-tree索引相结合的执行计划184 3.2.5 其他特殊处理的执行计划185 3.2.5.1 递归展开(recursive ...

    low:Golang中的底层数据类型和utils

    bitmap提供位图操作。 bitword提供n位字转换和从字符串。 bmtree将二进制树编码为位图。 iohelper提供了比io包更多的接口。 pbcmpl为pbcmpl添加了一个标题,以使其自我描述。 sigbits从排序的字符串列表中提取...

    leetcode博弈论-awesome-leetcode:在leetcode上练习

    位图(bitmap) 树 排序 179[M]. 查找 35[E]. 二分查找 852[E]. binary search 349[E]. binary search 动态规划 53[S]. 64[M]. 70[S]. 198[S]. 303[S]. 392[S]. 746[S]. 1025[S]. 分治、递归、回溯 深度优先搜索(DFS) ...

    gostl:go的数据结构和算法库,旨在提供类似C++ STL的功能

    功能列表数据结构优先队列堆rbtree(red_black_tree) 地图/多地图集/多集位图布隆过滤器hamt(hash_array_mapped_trie) 克塔玛跳过列表算法排序(快速排序) 稳定排序(合并排序) binary_search 下界upper_bound ...

    ActionScript开发人员指南中文版

    Bitmap和BitmapData类 处理像素 复制位图数据 使用杂点功能制作纹理 滚动位图 利用mipmap处理 位图示例:带动画效果的旋转的月亮 位图图像的异步解码 第章:过滤显示对象 过滤显示对象的基础知识 创建和应用滤镜 可用...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。...

    PostgreSQL教程(十):性能提升技巧

    一、使用EXPLAIN:  PostgreSQL为每个查询都生成一个查询规划,因为选择正确的查询路径对性能的影响是极为...如果查询仍然需要连接、聚集、排序,或者是对原始行的其它操作,那么就会在扫描节点”之上”有其它额外的

    算法:数据结构和算法

    算法 整理一下使用过的算法和数据结构 ...位图 B +树 B树 组合 完全二叉树 分治算法 动态规划 图 贪心算法 散列表 堆 链表 排序 阴离子 红黑树 回溯算法 递归 搜寻 跳表 排序 栈 字符串匹配 树 字典树

    OPenGL编程书籍

    在这一章我将教会你如何将一幅位图(bitmap)映射到正方体的六个面上去。我们将使用第一章的OpenGL代码来创建工程。创建一个空的窗口比修改上一课的代码更容易。 你将会发现第一章的代码在对于快速创建工程来说是及其...

    Nehe的OpenGL教程电子书

    在这一章我将教会你如何将一幅位图(bitmap)映射到正方体的六个面上去。我们将使用第一章的OpenGL代码来创建工程。创建一个空的窗口比修改上一课的代码更容易。 你将会发现第一章的代码在对于快速创建工程来说是及其...

    Visual C++ 编程资源大全(英文控件)

    用CPropertySheet创建完整的应用程序(12KB)&lt;END&gt;&lt;br&gt;8,addbitmap.zip Placing A Bitmap In The PropertySheet Button Area 将一个位图放到PropertySheet的按纽区域(2KB)&lt;END&gt;&lt;br&gt;9,add3dtext.zip Placing...

Global site tag (gtag.js) - Google Analytics