摘要:
C程序由以下几部分组成:正文段 初始化数据段 非初始化数据段 栈 堆正文段: 这是由cpu执行段机器指令部分,正文段是可共享的,正文段通常是只读的初始化数据段: 通常称为数据段,它包含了程序中需要明确赋初值的变量,例如,C程序中出现在任何函数之外的声明:int maxcount = 99; 此变量带有初值存放在初始化数据段中非初始化数据段:通常称为bss段,在程序开始执行前,内核将此段中段数据初始化为0或空指针。出现在任何函数外段C声明long sum[1000];此变量存放在非初始化数据段中栈: 自动变量以及每次函数调用时所需要保存的信息都存放在此段中。每次调用函数时,其返回值地址以及调用者 阅读全文
摘要:
找中位数最容易想到的方法就是,先对序列进行排序,取中位数,然而5亿个数要想全部读入内存需要将近2GB空间。 一种想法是采用外部排序的方法,在排序的过程中记录数据个数,找到中位数。首先采用hash() % 100,把数据分到100个文件中,然后对每个文件分别在内存中进行快速排序,再将100个小文件进行合并,并在合并过程中寻找中位数,时间复杂度是O(nlogn) 另外一种方法是,将数据按照数据空间分... 阅读全文
摘要:
给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中? http://blog.csdn.net/v_JULY_v/article/details/6279498 看到这个题的第一反应就是使用位图,使用内存空间为2^32bit = 512MB,遍历序列,把对应的bit位置一,查找的时间复杂度为O(1) 用位图来操作效率很高,这里... 阅读全文
摘要:
位图在随机数的排序中用途广泛,并且耗时较少,最常用的是一位位图,即用一个bit的0/1来表示一个数,如果这个数存在就把响应的bit位置为1,否则就是0。在真正使用的时候,首先遍历数列,把表示每个数的相应bit位置1,第二次遍历位图,判断相应bit位对应数字是否存在,存在就打印输出,这样的序列自动有序。但是单bit位有一个缺点就是,可以检测元素是否存在,但是对于含有重复元素的序列排序就无能为力了。题目:在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数这道题用2-bitmap可以很容易解决,每一个数用2-bit来表示,共可以表示4种状态,00表示不存在,01表示出现一次,10 阅读全文