赞
踩
方案 1:可以估计每个文件安的大小为 50G×64=320G,远远大于内存限制的 4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。
方案 2:如果允许有一定的错误率,可以使用 Bloom filter, 4G 内存大概可以表示 340亿 bit。将其中一个文件中的 url 使用 Bloom filter 映射为这 340 亿 bit,然后挨个读取另外一个文件的 url,检查是否与 Bloom filter,如果是,那么该 url 应该是共同的 url(注意会有一定的错误率)。
方案 1:
方案 2:
方案 3:
方案 1:
方案 1:
首先是这一天,并且是访问百度的日志中的 IP 取出来,逐个写入到一个大文件中。注意到 IP 是 32 位的,最多有 2^32 个 IP。同样可以采用映射的方法,比如模 1000,把整个大文件映射为 1000 个小文件,再找出每个小文中出现频率最大的 IP(可以采用hash_map 进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这 1000个最大的 IP 中,找出那个频率最大的 IP,即为所求。
方案 1:
方案 2:
2. 采用上题类似的方法,进行划分小文件的方法。然后在小文件中找出不重复的整数,并排序。然后再进行归并,注意去除重复的元素。
方案 1:
请怎么设计和实现?
方案 1:这题用 trie 树比较合适, hash_map 也应该能行。
方案 1:这题是考虑时间效率。用 trie 树统计每个词出现的次数,时间复杂度是 O(nle)( le 表示单词的平准长度)。然后是找出出现最频繁的前 10 个词,可以用堆来实现,前面的题中已经讲到了,时间复杂度是 O(nlg10)。所以总的时间复杂度,是 O(nle)与 O(nlg10)中较大的哪一个
方案 1:首先根据用 hash 并求模,将文件分解为多个小文件,对于单个文件利用上题的方法求出每个文件件中 10 个最常出现的词。然后再进行归并处理,找出最终的 10 个最常出现的词。
搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为 1-255 字节。假设目前有一千万个记录, 这些查询串的重复读比较高,虽然总数是 1千万,但是如果去除重复和,不超过 3 百万个。一个查询串的重复度越高,说明查询它的用户越多,也就越热门。请你统计最热门的 10 个查询串,要求使用的内存不能超过 1G。
方案 1:采用 trie 树,关键字域存该查询串出现的次数,没有出现为 0。最后用 10 个元素的最小推来对出现频率进行排序。
方案 1:
先大体估计一下这些数的范围,比如这里假设这些数都是 32 位无符号整数(共有 232个)。我们把 0 到 232-1 的整数划分为 N 个范围段,每个段包含(232)/N 个整数。比如,第一个段位 0 到 232/N-1,第二段为(232)/N 到(232) /N-1, …,第 N 个段为(232)( N-1) /N 到 232-1。然后,扫描每个机器上的 N 个数,把属于第一个区段的数放到第一个机器上,属于第二个区段的数放到第二个机器上, …,属于第 N 个区段的数放到第 N 个机器上。注意这个过程每个机器上存储的数应该是 O(N)的。下面我们依次统计每个机器上数的个数,依次累加,直到找到第 k 个机器,在该机器上累加的数大于或等于(N2) /2,而在第 k-1 个机器上的累加数小于(N2)/2,并把这个数记为 x。那么我们要找的中位数在第 k 个机器中,排在第(N2) /2-x 位。然后我们对第 k 个机器的数排序,并找出第(N2) /2-x 个数,即为所求的中位数的复杂度是 O(N^2)的。
方案 2:先对每台机器上的数进行排序。排好序后,我们采用归并排序的思想,将这 N个机器上的数归并起来得到最终的排序。找到第( N2) /2 个便是所求。复杂度是 O(N2*lgN^2 )的。
给定一个字符串的集合,格式如: {aaa,bbb,ccc},{bbb,ddd},{eee, fff },{ggg},{ddd,hhh}。要求将其中交集不为空的集合合并,要求合并完成的集合之间无交集,例如上例应输出{aaa,bbb,ccc,ddd,hhh},{eee, fff },{ggg}。
方案 1:
采用并查集
。首先所有的字符串都在单独的并查集中。然后依扫描每个集合,顺序合并将两个相邻元素合并。例如,对于{aaa,bbb,ccc},首先查看 aaa 和 bbb 是否在同一个并查集中,如果不在,那么把它们所在的并查集合并,然后再看 bbb 和 ccc 是否在同一个并查集中,如果不在,那么也把它们所在的并查集合并。接下来再扫描其他的集合,当所有的集合都扫描完了,并查集代表的集合便是所求。复杂度应该是 O(NlgN)的。改进的话,首先可以记录每个节点的根结点,改进查询。合并的时候,可以把大的和小的进行合,这样也减少复杂度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。