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语言实现。

  • 相关阅读:
    白话机器学习
    Intersecting Lines POJ
    Segments POJ
    Toy Storage POJ
    TOYS POJ
    2019CCPC秦皇岛赛区1004 Decimal
    Django 基本使用
    HTML页面布局
    微擎上传视频,音频,图片提示格式不支持
    微擎应用名称图标的修改
  • 原文地址:https://www.cnblogs.com/rayfloyd/p/11692390.html
Copyright © 2011-2022 走看看