zoukankan      html  css  js  c++  java
  • 随机线性网络编码的C语言实现,实现可靠传输:原理(1)

    线性方程组,大家都不陌生吧。来一组

    A11 *X1 + A12 *X2   + A13 *X3   + A14 *X4 =Q1
    A21 *X1 + A22 *X2   + A23 *X3   + A24 *X4 =Q2
    A31 *X1 + A32 *X2   + A133 *X3  + A34 *X4 =Q3
    A41 *X1 + A142 *X2  + A143 *X3  + A44 *X4 =Q4

    把未知数Xi 看成你要传输的数据包,这里一共是4个,通常情况下,我们就直接发四个数据给对方,收不收得到听天由命。

    现在呢,新方法:我们不仅发四个数据(X),我们还把数据(Qi)也全部扔给对方。

    • 情况一,(太不幸了)数据(X)全部丢了,只收到了全部的数据(Qi)。

      咋办,只有数据(Qi)能有什么用??我们再假设下,假如通信双方约定了同一套(Aij)系数矩阵意味着什么?

           现在答案很明显啊,我就有一套上面的四元线性方程组,求解出来就是原来要接收 四个数据(X)。

    • 情况二,(运气不错)数据(X)只丢了一个,但只收到了一个数据(Qi)。

           很简单的,仔细观察下,其实接收端收到的是一个一元一次线性方程组,解出来的未知数就是丢的那个数据(X)。

    • 情况其他,不用再举例子了吧,原理就是这么简单。原本要发送4个数据包,那么现在我发送5个数据包(有一个数据包是构造出来的),那么对方收到任意4个数据,都可以得到原本要收到的4个数据。

    不闲扯了,原理讲完了,剩下的都是编程问题。

    有人可能还有些小疑问,数据包怎么做乘法和加法运算???

    有办法,把上面那些运算定义成伽罗华域的四则运算就行了,乘法就成了域的多项式乘法,计算机很容易实现;加法就是大家经常接触到(C语言中的)异或运算。

    这些东西真的有人用吗?有的,QUIC协议中FEC了解一下,虽然没看过代码,QUIC协议中FEC实现得东西应该比我这个将要讲的方案简单很多,哈哈哈

    用兴趣可以来信交流(vslinux@qq.com),我这里已经有完整的随机线性网络编码的C语言实现。

  • 相关阅读:
    SSL JudgeOnline 1194——最佳乘车
    SSL JudgeOnline 1457——翻币问题
    SSL JudgeOnlie 2324——细胞问题
    SSL JudgeOnline 1456——骑士旅行
    SSL JudgeOnline 1455——电子老鼠闯迷宫
    SSL JudgeOnline 2253——新型计算器
    SSL JudgeOnline 1198——求逆序对数
    SSL JudgeOnline 1099——USACO 1.4 母亲的牛奶
    SSL JudgeOnline 1668——小车载人问题
    SSL JudgeOnline 1089——USACO 1.2 方块转换
  • 原文地址:https://www.cnblogs.com/rayfloyd/p/11692390.html
Copyright © 2011-2022 走看看