Cracking the coding interview--Q12.6
来源:互联网 发布:java io流怎么用 编辑:程序博客网 时间:2024/06/07 14:28
题目
原文:
You have a billion urls, where each is a huge page. How do you detect the duplicate documents?
译文:
你有一亿个urls, 每个urls都链接一个很大的页面,你怎样检测重复的页面?
解答
网页大,数量多,要把它们载入内存是不现实的。 因此我们需要一个更简短的方式来表示这些网页。而hash表正是干这事的。 我们将网页内容做哈希,而不是url,这里不同url可能对应相同的网页内容。
将每个网页转换为一个哈希值后,我们就得到了10亿个哈希值, 很明显,两两对比也是非常耗时的O(n2 )。因此我们需要使用其它高效的方法。
根据以上分析,我们可以推出满足条件的以下算法:
- 遍历网页,并计算每个网页的哈希值。
- 检查哈希值是否已经在哈希表中,如果是,说明其网页内容是重复的,输出其url。 否则保存url,并将哈希值插入哈希表。
通过这种方法我们可以得到一组url,其对应的网页内容都是唯一的。但有一个问题, 一台计算机可以完成以上任务吗?
一个网页我们要花费多少存储空间?
- 每个网页转换成一个4字节的哈希值
- 假设一个url平均是30个字符,那我们至少需要30个字节
- 因此对应一个url,我们一共要用掉34个字节
34字节 * 10亿 = 31.6GB。很明显,单机的内存是无法搞定的。
我们要如何解决这个问题?
我们可以将这些数据分成多个文件放在磁盘中,分次载入内存处理。 这样一来我们要解决的就是文件的载入/载出问题。
我们可以通过哈希的方式将数据保存在不同文件,这样一来,大小就不是问题了, 但存取时间就成了问题。硬盘上的哈希表随机读写要耗费较多的时间, 主要花费在寻道及旋转延迟上。关于这个问题, 可以使用电梯调度算法来消除磁头在磁道间的随机移动,以此减少消耗的时间。
我们可以使用多台机器来处理这些数据。这样一来,我们要面对的就是网络延迟。 假如我们有n台机器。
- 首先,我们对网页做哈希,得到一个哈希值v
- v%n 决定这个网页的哈希值会存放在哪台机器
- v/n 决定这个哈希值存放在该机器上哈希表的位置
转自:http://hawstein.com/posts/12.6.html
---EOF---
0 0
- Cracking the coding interview--Q12.6
- Cracking the coding interview--Q12.4
- Cracking the coding interview--Q12.1
- Cracking the coding interview--Q12.2
- Cracking the coding interview--Q12.3
- Cracking the coding interview--Q12.4
- Cracking the coding interview--Q12.5
- Cracking the coding interview--Q12.7
- Cracking the Coding Interview
- 《Cracking the coding interview》
- Cracking The Coding Interview
- Cracking the coding interview
- Cracking the coding interview
- Cracking the coding interview--Q9.6
- Cracking the coding interview--Q1.6
- Cracking the coding interview--Q1.6
- Cracking the coding interview--Q3.6
- Cracking the coding interview--Q4.6
- [C#] TextBox限制输入长度(中文字算2码)
- jsp乱码处理
- 10个有用的第三方iOS开源库
- HOSt ip is not allowed to connect to this MySql server
- axure变量使用1
- Cracking the coding interview--Q12.6
- Eclipse 安装/更新 Wowza IDE 插件的步骤
- servlet用法
- Android使用 LruCache 缓存图片
- 详解virtualbox虚拟机上网4种方式
- Rigidbody、Character Controller、Collider、Trigger 之间的区别和关系
- 电脑文件损坏无法找到怎么恢复
- Struts2中的OGNL详解
- 子表详细demo