文章插图
今天码哥给大家带来一种数据备份与修复的技术——里德所罗门编码 。
里德所罗门编码可是应用场景很多,例如我们耳熟能详的RAID(磁盘阵列),又例如在UDP传输中降低丢包导致的数据缺失的情况等等 。
什么是里德所罗门编码这里,先要介绍一种纠错方法——极大距离可分法(MDS) 。这是一种很常见的纠错方法,它将原始数据分成等长的N份,并根据这N份数据生成M个冗余的校验数据 。此时,M+N块数据中任意M块数据损失,也可以通过剩余N块数据经过计算来恢复原始数据 。
里德所罗门纠错算法就是经典的MDS算法 。
里德所罗门编码的理论基础
- 范德蒙矩阵
文章插图
- 有限域算法
- 伽罗华域
里德所罗门编码的原理在开始前,我们不得不引入一个数学问题——插值问题 。
在一些工程实践中,某些变量间是存在函数关系的,但通常不能用公式表示,只能用实验观测得到y=f(x),即一系列xi在函数上的值 。有些公式非常复杂,计算其完整公式并不划算,因此我们希望用另一个函数p(x)来尝试逼近f(x) 。
此时,假设在二维空间中有n个点,(x1, y1), (x2, y2), …, (xn, yn),希望得到一个多项式的解:
文章插图
这个多项式可以满足我们的当前条件:
文章插图
【神奇的数据恢复算法】
实际上,可以推演如下:
文章插图
可以看到矩阵A即为范德蒙矩阵,而如果每个点的x值互不相同,那么范德蒙矩阵的行列式值必不为零(略过证明),那么矩阵A就存在逆矩阵 。
由此,我们那可以看到,通过对插值问题的讨论,我们发现了一种数据恢复方式,即:
矩阵A * 矩阵B = 矩阵Y矩阵A的你矩阵 * 矩阵Y = 矩阵B
推荐阅读
- Nginx中配置https中引用http的问题
- Linux 程序编译过程的来龙去脉
- 这一次,让你完全理解 HTTPS 到底是如何做到数据传输安全的
- 移动应用开发的六大编程语言
- MySQL 8.0 InnoDB无锁化设计的日志系统
- 黑客是如何控制你手机的?出现这几种情况,你的手机可能已中招
- 请求地址最后面的“/”加和不加到底有什么区别?
- 朋友圈变现的6种方式,轻松从月入几千到月入几万?
- 史上最详细的Linux网卡ifcfg-eth0配置详解
- 太极拳的五素养 练习时必须要注意