摘要:
搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串 的长度为1-255字节。假设目前有一千万个记录, 这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个 。一个查询串的重复度越高,说明查询它的用户越多, 也就是越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。 (1)请描述你解决这个问题的思路; (2)请给出主要的处理流程,算法,以及算法的复杂度。分析:直接放到内存需要的空间 255*1000 0000 = 255 * 10M = 2.5G (内存限制1G)去重复后300 0000 * 255 = 255 * 3M < 1 阅读全文
摘要:
在某些应用中,因为内存资源有限制,而要排序的文件很大(比如10G的文件,只有10M的内存)主要的思想是:1 分割文件,使分割的文件能全部加载到内存。2 分别排序每一个分割的文件3 合并文件难的是合并操作1 跌增合并,一次合并两个文件。依次类推,直到最终只剩一个文件。时间复杂度主要在读取文件,要多次读取。2 利用堆,一次合并多个文件 时间复杂度主要取决于堆的查找。(堆主要用于查找当前最小的行) 或者更直接的是,每次顺序查找当前内存中的最小行。一般而言内存访问速度要快很多,因此第2中方法应该快很多。如下是一个简单的window上的实现://单行最大长度lEN_LINE - 1#define LEN 阅读全文