`
CalvinMnakor
  • 浏览: 52106 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《编程珠玑》第一章 位图在大量数据中的使用

阅读更多
书中提到了产生大量不重复数据的需要:
产生NUM个N内的32位数字
	for (i = 0;i < NUM;++ i)
	{
		temp = (double)rand()/(RAND_MAX+1)*N;
		bits = temp / BITSPERWORD;
		n = temp % BITSPERWORD;
        while (a[bits] & (1<<n))                 //already existing number
        {
			//就近选择
			if (temp >= N)
			{
             temp = 0;
	 		} 
			else
			{
				temp ++;
			}
			//下述策略效率太慢
			//temp += (double)rand()/(RAND_MAX+1)*N;
			//temp %= N;
			bits = temp / BITSPERWORD;
			n = temp % BITSPERWORD;
        }
		outfile<<temp<<" ";
		a[bits] |= (1<<n);                             //set to 1
	}

上述位图标识采用的是才用开辟一定int型数组使用的,其中BITSPERWORD=32.
其中,在数据产生达到千万以上或是N和NUM相差不多,第一种策略会是机器跑个没停,所以,使用了就近原则,以使尽快找到不重复数据。
当然,我们还可以使用vs2008中stl中的位图数据类型,需包含头文件:
#include <bitset>


位图的使用:
bits.test(pos)           //检测是否为一
bits.set(pos)            //置1
bits.reset(pos)          //置0


然后,排序的方法与上述位图思路相同,(毕竟,没法一下对这么多数字一起处理,故应一个个从磁盘读取,标识,然后再读取数据)。

不过,当数据很大时,效率还是很低的,例如:
当产生亿计的数据,需要花费大概5~6小时。
如果要产生第二章所需的2^32内40亿个数据,时间可想而知。

另外,在数据排序的时候,如果内存有限制,比如只有几M字节使用,而上述产生2^32数据量时需开辟512M空间,即使亿计的数据量,也要仅百M的空间,如此我们需要采用通道技术。
K通道在Kn时间和n/k空间内排序:
将数据分为几个部分,分别读取磁盘,每次访问一定大小范围的数据,最终标记完所有数据。
分享到:
评论

相关推荐

    编程珠玑之第二章questionC 测试数据

    在编程领域,"编程珠玑"是一本深受程序员喜爱的经典著作,它深入浅出地探讨了计算机科学中的算法和设计技巧。"第二章questionC"提及的问题是关于"求变位词",这是一个常见的字符串处理问题,涉及到字符统计、排序...

    编程珠玑 第2版(修订版)_编程珠玑修订_资料_

    《编程珠玑》一书将这些技巧和经验整理成章,涵盖了算法、数据结构、性能优化、代码质量等多个方面,是程序员自我提升的重要参考资料。书中强调的问题求解策略和程序设计思想,对于初学者和资深开发者都有很大的启发...

    编程珠玑 编程珠玑 编程珠玑 编程

    书中涵盖了一系列实用的编程问题和解决方案,这些“珠玑”般的编程智慧,无论对于初学者还是经验丰富的开发者,都有着极高的参考价值。 编程珠玑的核心概念之一是数据结构与算法的选择和设计。书中的例子多以实际...

    编程珠玑源码下载编程珠玑书后源代码

    《编程珠玑》是计算机科学领域的一本经典之作,由Jon Bentley 编著,它以其深入浅出的方式探讨了程序设计的问题和解决方案,尤其在数据结构、算法优化以及问题解决策略方面有着独到的见解。这本书的源代码是作者为了...

    编程珠玑 算法 数据结构

    通过对《编程珠玑》一书中关于算法和数据结构的学习,我们不仅可以了解到这些基础知识的重要性,还能掌握如何在实际场景中灵活运用它们来解决问题。无论是对于初学者还是有一定经验的程序员来说,《编程珠玑》都是一...

    编程珠玑 编程珠玑续

    3. **输入/输出处理**:讨论如何有效地处理大量数据的输入和输出,包括磁盘I/O和内存管理,强调在实际工程中考虑性能的重要性。 4. **编程实践**:介绍了一些实用的编程技巧,如错误处理、调试方法和代码风格,旨在...

    编程珠玑(第二版)答案

    根据提供的标题“编程珠玑(第二版)答案”和描述“编程珠玑(第二版)答案”,我们可以推测出这是关于《编程珠玑》这本书的相关解答资料。《编程珠玑》是一本经典的计算机科学书籍,作者为Jon Bentley。本书旨在...

    编程珠玑习题集锦

    《编程珠玑》是计算机科学领域的一本经典之作,作者Jon Bentley通过一系列实际问题的探讨,引导读者理解和掌握编程中的高效解题技巧。书中的问题和解决方案涵盖了算法设计、数据结构优化以及问题解决策略等多个方面...

    编程珠玑第2版(中文pdf版)

    数据结构是程序设计的核心组成部分之一,《编程珠玑》第二版中也对此做了详尽的讲解。书中介绍了数组、链表、树、图等常见数据结构,并且深入分析了它们各自的优缺点以及适用场景。此外,还讨论了如何选择合适的数据...

    编程珠玑 Programming Pearls 第二版(中文版+源代码)

    《编程珠玑》是计算机科学领域的一本经典之作,作者是Jon Bentley,它以其独特的视角和深入浅出的讲解方式,向读者展示了编程艺术的精髓。这本书的第二版更是深受程序员和计算机科学家们的喜爱,因为它不仅涵盖了...

    编程珠玑.pdf

    第4章 自描述数据 33 4.1 名字—值对 33 4.2 记录来历 36 4.3 排序实验 37 4.4 原理 39 4.5 习题 39 第二部分 实 用 技 巧 第5章 劈开戈尔迪之结 43 5.1 小测验 43 5.2 解答 44 5.3 提示 44 5.4 原理 47 5.5 习题 48...

    编程珠玑中文 第二版 非扫描版

    在《编程珠玑》中,你将学习到如何处理大量数据,如何设计高效的输入/输出策略,以及如何利用空间和时间复杂度的权衡来优化程序。这些问题在大数据处理、云计算和现代软件工程中都是至关重要的。书中还讨论了如何...

    《编程珠玑》第2版中文PDF+源代码

    《编程珠玑》是计算机科学领域的一本经典著作,作者是Jon Bentley,他在书中通过一系列有趣的问题和解决方案,深入浅出地探讨了程序设计的艺术和技巧。这本书的第二版中文PDF和源代码的提供,为中国的程序员和计算机...

    编程珠玑 第二版 修订版 epub

    3. **输入/输出处理**:书中专门探讨了I/O操作的优化,这对于处理大量数据或实时系统来说至关重要。如何高效地读写数据,减少磁盘访问,提高程序响应速度,这些都是《编程珠玑》所关注的问题。 4. **问题分解与设计...

    编程珠玑 第二版 源代码

    《编程珠玑》第二版是计算机科学领域的一本经典著作,由Jon Bentley撰写,它以其深入浅出的方式探讨了程序设计中的诸多问题和解决方案。这本书不仅涵盖了算法和数据结构,还涉及了软件工程的实践与智慧,对于程序员...

    编程珠玑 第二版 中文版 英文版

    《编程珠玑》第二版中还引入了更多与现实世界编程挑战相关的话题,比如数据库查询优化、并发编程和分布式系统的概念。这些内容对于理解和解决现代软件工程中的复杂问题非常有帮助。 书中附带的源代码可以帮助读者更...

    编程珠玑之位图排序

    如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该整数关联。 输出:按升序排列的输入整数列表。 约束:最多有(大约)1MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多几分钟,...

    位图排序《编程珠玑》

    实现位图排序,其中假设n为10 000...具体细节详见《编程珠玑》第一章问题; 由于数据的大小问题,在这#define N 1000,即数据在1000以内的100个数据,进行排序(当然由于随机数的产生问题,有数重复,在此并未处理);

    编程珠玑(续)

    《编程珠玑(续)》是计算机...书中涵盖了程序员操纵程序的技术、程序员取舍的技巧、输入和输出设计以及算法示例,这些内容组成一个有机的整体,如一串串珠玑展示给程序员。  《编程珠玑(续)》适合各级程序员阅读参考。

    编程珠玑源代码

    《编程珠玑》是计算机科学领域的一本经典著作,作者是Jon Bentley,它以其深入浅出的讲解方式,探讨了程序设计中的一些核心问题。这本书不仅涵盖了算法和数据结构,还涉及了问题解决、程序效率优化以及软件工程的...

Global site tag (gtag.js) - Google Analytics