龙空技术网

金融科技师考点:纠删码(Erasure Code)中的数学知识及应用

曹国钧博士 74

前言:

如今各位老铁们对“算法的常见表示方式有哪几种”大体比较看重,看官们都想要剖析一些“算法的常见表示方式有哪几种”的相关资讯。那么小编在网摘上网罗了一些有关“算法的常见表示方式有哪几种””的相关资讯,希望小伙伴们能喜欢,兄弟们快快来学习一下吧!

背景

  在数据存储领域,Hadoop采用三副本策略有效的解决了存储的容错问题,但是三副本策略中磁盘的利用效率比较低,仅有33%,而且副本带来的成本压力实在太高,后来适时地出现了纠删码的概念。当冗余级别为n+m时,将这些数据块分别存放在n+m个硬盘上,这样就能容忍m个(假设初始数据有n个)硬盘发生故障。当不超过m个硬盘发生故障时,只需任意选取n个正常的数据块就能计算得到所有的原始数据。

纠删码以更低的存储成本备受青睐,目前Microsoft、Google、Facebook、Amazon、淘宝(TFS)都已经在自己的产品中采用了Erasure Code。

  在以上背景的基础上,我们在纠删码的编码、解码中采用的矩阵数学知识,以及矩阵分解中用到的LU分解等数学知识进行分析,并在文末给出相应的代码示例。

纠删码工作原理简介

  RS(Reed-Solomom)码是一种比较常见的纠删码,它的两个参数m和n分别代表校验块个数和原始数据块个数。

纠删码编码过程

在图中的编码过程,C代表校验块,D代表原始的数据块。

当丢失了部分数据,如图:

纠删码解码过程:

Step1:在编码矩阵中去掉丢失数据块以及该数据块对应的行。即B矩阵变为了n*n 维度的方阵,C与D组合的矩阵由(n+m)行变为n行,在上述假设过程中,我们得到新的矩阵以及对应的矩阵运算关系式,其中在丢失了部分数据块后,D所代表的原始数据块便成为了要求的目标。

Step2:求B’的逆矩阵。

Step3:可以采用对等式两边同时乘上B’的逆矩阵,于是得到所求解。

为了保证B’逆矩阵是存在的,必须保证B’矩阵是可逆的,在通常的计算过程中,用于校检的黄色部分数据块采用范德蒙矩阵。

函数Inverse[B′]代表B'的逆矩阵,I代表单位矩阵:

Inverse[B′]∗B′∗D=Inverse[B′]∗SI∗D=Inverse[B′]∗SD=Inverse[B′]∗S

返回目录

Python模拟纠删码数据恢复的流程

# Erasure Code

import numpy as np

# 备份数量

backup_up = 2

# 原始数据

data = np.array([1, 2, 3, 4, 5])

# 根据纠删码原理生成的数据

vander_data = np.concatenate((np.identity(len(data)), np.vander(data, 3).transpose()::-1]), axis=0)

storage_data = vander_data.dot(data)

print('生成数据',storage_data)

# 模拟数据丢失

loss_data = np.concatenate((storage_data[0:3], storage_data[5:7]), axis=0)print('丢失后数据', loss_data)

# 恢复数据

recover_data = np.linalg.inv(np.concatenate((vander_data[0:3], vander_data[5:7]), axis=0)).dot(loss_data)

print('恢复数据',recover_data)

# 输出结果

# 生成数据 [ 1. 2. 3. 4. 5. 15. 55. 225.]

# 丢失后数据 [ 1. 2. 3. 15. 55.]

# 恢复数据 [1. 2. 3. 4. 5.]  

正交分解

  矩阵的正交分解又称为QR分解,是将矩阵分解为一个正交矩阵Q和一个上三角矩阵的乘积的形式。任意实数方阵A,都能被分解为 。这里的Q为正交单位阵,即 R是一个上三角矩阵。这种分解被称为QR分解。 QR分解也有若干种算法,常见的包括Gram–Schmidt、Householder和Givens算法。 QR分解是将矩阵分解为一个正交矩阵与上三角矩阵的乘积。这里仅记录一下第一种分解的计算过程(Matlab代码以及例题计算过程)。

Schmidt正交化

  定理1 设A是n阶实非奇异矩阵,则存在正交矩阵Q和实非奇异上三角矩阵R使A有QR分解;且除去相差一个对角元素的绝对值(模)全等于1的对角矩阵因子外,分解是唯一的.

  定理2 设A是m×n实矩阵,且其n个列向量线性无关,则A有分解A=QR,其中Q是m×n实矩阵,且满足QHTQ=E,R是n阶实非奇异上三角矩阵该分解除去相差一个对角元素的绝对值(模)全等于1的对角矩阵因子外是唯一的.用Schmidt正交化分解方法对矩阵进行QR分解时,所论矩阵必须是列满秩矩阵。

算法步骤

写出矩阵的列向量;列向量按照Schmidt正交化正交;得出矩阵的Q′,R′;对R′的列向量单位化得到Q,R′的每行乘R′每列的模

matlab代码

function[X,Q,R] = QRSchmidt(A,b)%方阵的QR的Gram-Schmidt正交化分解法,并用于求解AX=b方程组[m,n]=size(A); if m~=n    %如果不是方阵,则不满足QR分解要求    disp('不满足QR分解要求');endQ=zeros(m,n);X=zeros(n,1);R=zeros(n);for k=1:nR(k,k)=norm(A(:,k));    if R(k,k)==0        break;    end    Q(:,k)=A(:,k)/R(k,k);    for j=k+1:n        R(k,j)=Q(:,k)'*A(:,j);         A(:,j)=A(:,j)-R(k,j)*Q(:,k);    endif nargin==2    b=Q'* b;    X(n)=b(n)/R(n,n);    for i=n-1:-1:1        X(i)=(b(i)-sum(R(i,i+1:n).*X(i+1:n)'))/R(i,i);    endelse    X=[];endend

手撕计算过程

matlab自带方法

%产生一个3*3大小的魔方矩阵A=magic(3)[Q,R]=qr(A)

返回目录

参考文献:数值分析--矩阵QR分解的三种方法Math-Model(五)正交分解(QR分解)

标签: #算法的常见表示方式有哪几种 #lu分解法程序流程图