首页 > 其他 > 详细

编程之美1.5 快速找出故障机器

时间:2014-02-12 23:02:33      阅读:399      评论:0      收藏:0      [点我收藏+]
     关心数据挖掘和搜索引擎的程序员都知道,我们需要很多的计算机来存储和处理海量数据。然而,计算机难免会有硬件故障而导致网络联系失败或死机。为了保证搜索引擎的服务质量,我们需要保证每份数据都有多个备份。
     为了简单起见,我们假设一个机器仅储存一个标号为 ID 的纪录(假设 ID 是小于 10 亿的整数)假设每份数据保存两个备份,这样就有两个机器储存了同样的数据。 
      1. 在某个时间,如果得到一个数据文件 ID 的列表,是否能够快速地找出这个表中仅出现一次的 ID? 
      2. 如果已经知道只有一台机器死机(也就是说只有一个备份丢失)呢?如果有两台机器死机呢(假设同一个数据的两个备份不会同时丢失)?

分析:
     这个问题简化一下就是,给定个ID列表,有一个ID仅出现一次,其余的都出现了2次,如何快速找到这个只出现一次的ID。第二问就是,如果有两个ID出现一次,如何快速找到这两个ID。最简单的办法是遍历一遍记录每个ID的次数,但是这类问题都需要考虑假如数据量非常大怎么办的问题,数据量非常大时,可能一个长度为ID数量的数组都会存不下。
     这个题目的优化方法比较多。假如只有一台受损,那么可以使用异或运算进行操作,遍历每个ID并计算已遍历过的数据的亦或值,遍历完成之后得到的就是那个仅有一个的ID。但是这个方法不适合有两台机器死机的情况。两台机器死机的情况下,可以这样改进这个算法,先进行一次遍历异或运算,得到的值为这两台机器的异或值,由于这两个机器不同,那么至少有一位为1,可以根据这位的值把数分成两组,分别异或,得到的就是这两台机器的ID。

编程之美1.5 快速找出故障机器

原文:http://blog.csdn.net/jarelzhou/article/details/19114777

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!