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

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

随机线性网络编码的C语言实现,实现可靠传输:原理(1)的更多相关文章

  1. 随机线性网络编码的C语言实现,实现可靠传输:实现篇(2)

    伽罗华域(2^8)乘除法的编程实现

  2. 根据Unicode编码用C#语言把它转换成汉字的代码

    rt 根据所具有的Unicode编码用C#语言把它转换成汉字的代码 var s = System.Web.HttpUtility.HtmlDecode(Utf8Str); var o = Newton ...

  3. Go语言数组和切片的原理

    目录 数组 创建 访问和赋值 切片 结构 初始化 访问 追加 拷贝 总结 数组和切片是 Go 语言中常见的数据结构,很多刚刚使用 Go 的开发者往往会混淆这两个概念,数组作为最常见的集合在编程语言中是 ...

  4. C语言与汇编语言相互调用原理以及实例

    C语言与汇编语言相互调用原理以及实例 1.原理 其实不管是C语言还是汇编语言想要执行都是最终编译链接成为二进制文件. 这里一定要明确编译和链接是两个步骤,生成的文件格式也是不一样的. 编译生成的文件是 ...

  5. atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97

    atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参 ...

  6. 15、R语言聚类树的绘图原理

    聚类广泛用于数据分析.去年研究了一下R语言聚类树的绘图原理.以芯片分析为例,我们来给一些样品做聚类分析.聚类的方法有很多种,我们选择Pearson距离.ward方法. 选择的样品有: "GS ...

  7. Java语言编码规范 - Java语言编码规范(中文版)(http://doc.javanb.com/code-conventions-for-the-java-programming-language-zh/index.html)

      目录 1 介绍 1.1 为什么要有编码规范 1.2 版权声明 2 文件名 2.1 文件后缀 2.2 常用文件名 3 文件组织 3.1 Java源文件 3.1.1 开头注释 3.1.2 包和引入语句 ...

  8. Shannon-Fano-Elias编码的C语言实现

    Shannon-Fano-Elias编码 一.理论分析 Shannon-Fano-Elias编码是利用累积分布函数来分配码字. 不失一般性,假定取X={1,2,-m}.如果对于全部的x,有p(x)&g ...

  9. 随机以及时间相关函数——C语言描述

    随机相关的函数 头文件 stdlib.h 相关函数 :rand .srand rand( rand C++ Reference ) 函数声明:int rand( void ); rand函数返回一个位 ...

随机推荐

  1. oracle习题-emp表查询练习

    emp表查询练习 1 查询emp表的全部记录 Select * from emp; 2 查询出每个雇员的编号.姓名.基本工资 Select empno,ename,sal from emp; 3 查询 ...

  2. Leetcode46. Permutations全排列

    给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1 ...

  3. 【react】react-bookManager

    作者可能是本意想要做一个图书管理系统,不过添加书籍的时候报错,所以简单的页面我们简单的看看 先上github地址:https://github.com/hesisi/react-bookManager ...

  4. 云原生交付加速!容器镜像服务企业版支持 Helm Chart

    2018 年 6 月,Helm 正式加入了 CNCF 孵化项目:2018 年 8 月,据 CNCF 的调研表明,有百分之六十八的开发者选择了 Helm 作为其应用包装方案:2019 年 6 月,阿里云 ...

  5. 从0开始学习 GitHub 系列之「08.如何发现优秀的开源项目」

    之前发过一系列有关 GitHub 的文章,有同学问了,GitHub 我大概了解了,Git 也差不多会使用了,但是 还是搞不清 GitHub 如何帮助我的工作,怎么提升我的工作效率? 问到点子上了,Gi ...

  6. iOS音频篇:使用AVPlayer播放网络音乐

    http://www.cocoachina.com/ios/20160324/15767.html 引言 假如你现在打算做一个类似百度音乐.豆瓣电台的在线音乐类APP,你会怎样做? 首先了解一下音频播 ...

  7. JQuery--动画和DOM的增删查改常用函数总结

    jQuery的动画api animate jQuery设置动画 animate({属性集合},时间); animate({属性集合},时间,回调函数); animate({属性集合},时间,运动曲线, ...

  8. node.js对象数据类型

    在这里复习下前端JS的数据类型:前端JS中的数据类型: 1.基本/原生/值类型 string.number.boolean.null.undefined 2.引用/对象类型    ES对象类型:Str ...

  9. nginx+tomcat集群+redis(memcache)session共享!

    常用保持session的方式: 1.一些代理(比如nginxIP_hash) 1.使用数据库来存储Session 2.使用Cookie来存储Session                       ...

  10. day39 10-Spring的AOP:基于AspectJ的切点定义

    切点是我们真正应用在哪些方法上,增强的那些方法上,就是add().update()和find().delete()是没用的.没用的话就是这三个方法.为什么要定义一个切点呢? 所以可以直接在切面中定义一 ...