`
yuan_xulong
  • 浏览: 89370 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用位图实现整数排序

 
阅读更多

    命题:一个顺序输入文件(比如磁带机),无序保存了一些整型值,这些值最小从1开始,最大不超过10000000,且没有重复,要求对文件中的数值进行排序,并按升序输出.

    约束:可以使用的内存很小,最大不超过2M内存.

    算法实现:可以使用位图来实现该排序,具体描述,假设有5个数字集合{1,2,3,5,8},可以用10位位图表示为{1,1,1,0,1,0,0,1,0,0},位图的长度描述了最大可以保存的值,位图的值表示对应于该位置的值是否存在,1表示存在该值,0表示集合不存在该值,对于以上例子来说,10位的位图可以表示的最大数字为10,也就是最后位置的值为1,比如,要表示{3,5,10},位图的值为{0,0,1,0,1,0,0,0,0,1}即可.

    有了以上基础,对于命题即可解决,因为最大数不超过1000000,因此我们需要定义一个一百万的位图,具体需要的内存为:1000000/1024/1024 <=1M,然后读入顺序文件,对于每一个数值,把相应位置的值置为1即可,然后遍历该位图,如果值为1即输出该值,即可实现排序.伪代码如下(不会写伪代码,希望大家能看懂):

for(i = 1 to 1000000)

  bitmap(i = 0)

endfor 

for(digit in file)

  bitmap[digit] = 1

endfor

for(i = 1 to 1000000)

  if(bitmap[i] == 1)

    output(i)

  endif

endfor

 

分享到:
评论

相关推荐

    二分法排序算法 C语言实现

    根据给定的文件信息,我们可以总结出以下关于“二分法排序算法C语言实现”的相关知识点: ### 1. 二分法搜索算法原理 二分法搜索算法,也称为折半查找算法,是一种在有序数组中查找特定元素的搜索算法。其基本思想...

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

    对于0至9999999之间的整数排序,可以使用两趟算法。 通过以上分析,我们可以了解到位图数据结构在排序算法中的应用,以及它在处理特定类型的排序问题时所展现出的效率和优势。位图排序算法特别适合于有限定义域、...

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

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

    C++实现位图排序实例

    位图排序的核心思想是用一个位数组来表示这些整数,每个位对应一个可能的整数值。如果某个整数在待排序集合中存在,则将其对应的位设置为1,反之则为0。 具体步骤如下: 1. 初始化位数组:将所有位设置为0,这可以...

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

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

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

    另一种实现位图法的方法是使用基本类型数组来存储位图。这种方法需要手动实现位图的操作,例如,设置位、获取位等。 下面是使用基本类型数组实现位图法的示例代码: ```java public class BitMap { public static...

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

    本主题将深入探讨如何使用不同的算法和技术来解决这个问题,包括位图的基本概念、颜色表示法、数据结构的选择以及具体的实现策略。 位图是一种常见的图像格式,它由像素阵列构成,每个像素都有自己的颜色值。在RGB...

    个人针对学习几种排序算法的总结

    基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表示字符串(如名字或日期)和特定格式的浮点数,所以基数排序也不是只能用于整数。 9. 计数...

    C语言位图算法详解

    - **快速查找问题**:如果需要在一个无序的40亿个不重复的unsigned int整数集合中判断一个数是否在其中,可以使用位图算法。分配512MB的内存,每个位代表一个unsigned int值。遍历40亿个数,将对应位设置为1。查询...

    算法java实现

    位图是一种用二进制数组表示集合的高效方法,常用于空间效率要求高的场景,如判断一个大整数集合中是否存在某个特定整数。 这些Java类文件展示了算法的实践应用,涵盖了数据结构、搜索策略和优化方法等多个方面。...

    Java 位图法排序的使用方法

    位图法排序是一种在特定情况下效率较高的排序技术,尤其适用于数据范围相对较小的整数排序。这种方法基于位操作,利用数组来表示一个位图,其中每一位对应一个可能的数值。在Java中,虽然标准库中的排序算法如`...

    《编程珠玑》部分源代码Java实现

    书中可能会展示如何用Java实现归并排序,包括如何分割数组、递归排序和合并两个已排序的子数组。 3. **其他算法与数据结构**:除了上述内容,源代码可能还涵盖了其他经典的算法和数据结构,比如快速排序、堆排序、...

    delphi 开发经验技巧宝典源码

    0119 使用IntToStr函数将整数转换为字符串类型 80 0120 使用StrToInt函数将字符串转换成整数 81 0121 使用StrToBool函数将字符串转换为布尔类型 81 4.6 对话框函数 81 0122 使用InputBox函数显示输入对话框...

    阿里巴巴校园招聘阿里云笔试试题题目.doc

    2. 位图算法:位图算法可以用于解决大规模数据问题,例如寻找不存在的整数,通过将数据分段加载到内存中,使用位图来标记存在的整数。 3. 排序算法:可以使用快速排序或归并排序等算法来对大量数据进行排序。 ...

    常用的数据结构学习源代码集合

    `SortRadix.cpp`可能实现了基数排序,这是一种非比较型整数排序算法,根据数字位数进行逐位排序。 6. **图的遍历**: 尽管没有直接的文件名表明是图的遍历,但在数据结构学习中,通常会学习深度优先搜索(DFS)和...

    delphi 开发经验技巧宝典源码06

    0119 使用IntToStr函数将整数转换为字符串类型 80 0120 使用StrToInt函数将字符串转换成整数 81 0121 使用StrToBool函数将字符串转换为布尔类型 81 4.6 对话框函数 81 0122 使用InputBox函数显示输入对话框...

    bounded_sorted_list_compression:关于Stack Overflow问题的小知识-压缩1000000以下唯一整数的排序列表

    - 另一个方法是使用**霍夫曼编码**(Huffman Coding),这是一种基于频率的变长编码,频繁出现的元素用较短的代码表示,不常出现的元素用较长的代码表示。但由于我们的整数是唯一的,霍夫曼编码可能不是最佳选择。 ...

Global site tag (gtag.js) - Google Analytics