分析:那么我们来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-map的方法来达到排序的目的。要表示8个数,我们就只需要8个Bit(1Bytes),首先我们开辟1Byte的空间,将这些空间的所有Bit位都置 ...
问题描述 输入:一个最多包含n个正整数的文件,每个数都小于n,其中n 。如果在输入文件中有任何正数重复出现就是致命错误。没有其他数据与该正数相关联。 输出:按升序排列的输入正数的列表。 约束:最多有 MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多几分钟,运行时间为 秒就不需要进一步优化。 程序设计与实现概要: 应用位图或位向量表示集合。可用一个 位长的字符串来表示一个所有元素都小于 的 ...
2012-08-14 14:06 1 8146 推荐指数:
分析:那么我们来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-map的方法来达到排序的目的。要表示8个数,我们就只需要8个Bit(1Bytes),首先我们开辟1Byte的空间,将这些空间的所有Bit位都置 ...
二分查找是《编程珠玑》作者很喜爱的一个话题,之前我曾经专门写了一篇博文:如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式,在这里将换几个角度,继续探讨二分查找的相关内容,以及与它联系紧密的分治法和排序思想。 目录 二分思想和分治法 ...
写在前面的 2012年3月25日买下《编程珠玑》,很期待但不知道它能给我带来什么! 编程珠玑,字字珠玑。但是翻译有点拗口,有时候整句话读下来都不知道在讲什么,多少有点掩饰了珠玑的魅力,真怀疑是不是直接有道翻译了。 位图数据结构法 在“开篇”的里,讲述了排序的一个问题,大意就是,对一个“最多 ...
位向量/位图是一个很有用的数据结构,在充分利用小空间存储大量数据方面非常具有优势,Linux内核中很多地方都是用了位图。同时,它不但基础,而且用到了很多编程语言的知识,以及对细节的把握,常常作为面试题出现。这里将要介绍它的实现、操作、应用。 与位图(bitmap)比,我更倾向于用位向量 ...
题目:对2G的数据量进行排序,这是基本要求。 数据:1、每个数据不大于8亿;2、数据类型位int;3、每个数据最多重复一次。 内存:最多用200M的内存进行操作。 我听过很多种类似问题的解法,有的是内存多次利用,有的用到了外存,我觉得这两种做法都不是比较好的思想,太慢。由于这个题目看起 ...
本书第一章提出了一个看似简单的问题,有最多1000万条不同的整型数据存在于硬盘的文件中,如何在1M内存的情况下对其进行尽可能快的排序。 每个数字用4byte,1M即可存储250 000个数据,显然,只要每次对250 000个数据排序,写入到文件中即可,重复40次。 那么如何选出每次遍历 ...
1,位图法介绍 位图的基本概念是用一个位(bit)来标记某个数据的存放状态,由于采用了位为单位来存放数据,所以节省了大量的空间。举个具体的例子,在Java中一般一个int数字要占用32位,如果能用一位就表示这个数,就可以缩减大量的存储空间。一般把这种方法称为位图法,即Bitmap ...
Select 算法 I 编程珠玑(续)介绍的 Quickselect 算法 选择 N 个元素中的第 K 小(大)值,是日常场景中常见的问题,也是经典的算法问题. 选取 N 个元素的数组的中的第 K 小(大)值,最简单的想法是将数组排序后直接选取. 那么这种方法的时间复杂度是O(N log N ...