摘要: 原文地址:http://kenby.iteye.com/blog/1028465题目:100亿个整数,求最大的1万个数,并说出算法的时间复杂度算法:如果把100亿个数全部读入内存,需要100 0000 0000 * 4B 大约40G的内存,这显然是不现实的。我们可以在内存中维护一个大小为10000的最小堆,每次从文件读一个数,与最小堆的堆顶元素比较,若比堆顶元素大,则替换掉堆顶元素,然后调整堆。最后剩下的堆内元素即为最大的1万个数,算法复杂度为O(NlogN)实现:从文件读数据有讲究,如果每次只读一个数,效率太低,可以维护一个输入缓冲区,一次读取一大块数据到内存,用完了又从文件接着读,这样效率 阅读全文
posted @ 2012-04-27 09:44 cryingbaby304 阅读(428) 评论(0) 推荐(0)
摘要: 目的:基本掌握了make的用法,能在Linux系统上编程。环境:Linux系统,或者有一台Linux服务器,通过终端连接。一句话:有Linux编译环境。准备:准备三个文件:file1.c, file2.c, file2.hfile1.c:#include <stdio.h>#include "file2.h"int main(){printf("print file1$$$$$$$$$$$$$$$$$$$$$$$$\n");File2Print();return 0;}file2.h:#ifndef FILE2_H_#defineFILE2_ 阅读全文
posted @ 2012-04-24 21:30 cryingbaby304 阅读(202) 评论(0) 推荐(0)
摘要: 原文地址:http://space.itpub.net/16856446/viewspace-612834一个由C/C++编译的程序占用的内存分为以下几个部分,1、栈区(stack),由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap),一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区(static),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 阅读全文
posted @ 2012-04-24 10:45 cryingbaby304 阅读(1513) 评论(0) 推荐(1)