码迷,mamicode.com
首页 > 其他好文 > 详细

FEC之异或运算应用

时间:2017-05-16 21:36:41      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:raid   strong   参考   通过   运算   com   tar   case   需要   

话说为啥FEC需要异或( ^/⊕ )操作呢?

异或:xor

异或运算规则:
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0

异或运算特性:
1). a xor a = 0
2). a xor 0 = a
3). (a xor b) xor c = a xor (b xor c)
4). IF a xor b = c THEN a xor c = b   

异或的运算特性有两点很好的应用

查找
case 1:
一个数组,除了其中一个元素,其他元素都为空,如何找到这个元素?
对数组所有元素做异或的结果即为这个元素
利用了异或运算特性的1)、2)、3)

case 2:
给一个很大的数组,里面有两个数只出现过一次,其他数都出现过两次,把这两个数找出来?
这个case复杂一些,有兴趣的同学可以参考:一个百度的面试题目


校验&恢复

校验&恢复主要利用的了异或的第四条特性:IF a xor b = c THEN a xor c = b 
一个很好的应用实例是RAID5
简单描述下:
使用3块磁盘(A、B、C)组成RAID5阵列,当用户写数据时,将数据分成两部分,分别写到磁盘A和磁盘B
A xor B的结果写到磁盘C
当读取A的数据时,通过B xor C可以对A的数据做校验
当A盘出错时,通过B xor C也可以恢复A盘的数据

RAID5的实现比上述的描述复杂多了,有兴趣的同学看下RAID5

FEC之异或运算应用

标签:raid   strong   参考   通过   运算   com   tar   case   需要   

原文地址:http://www.cnblogs.com/lidabo/p/6863639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!