随机线性网络编码的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个,通常情况下,我们就直接发四个数据给对方,收不收得到听天由命。
现在呢,新方法:我们不仅发四个数据(Xi ),我们还把数据(Qi)也全部扔给对方。
- 情况一,(太不幸了)数据(Xi )全部丢了,只收到了全部的数据(Qi)。
咋办,只有数据(Qi)能有什么用??我们再假设下,假如通信双方约定了同一套(Aij)系数矩阵意味着什么?
现在答案很明显啊,我就有一套上面的四元线性方程组,求解出来就是原来要接收 四个数据(Xi )。
- 情况二,(运气不错)数据(Xi )只丢了一个,但只收到了一个数据(Qi)。
很简单的,仔细观察下,其实接收端收到的是一个一元一次线性方程组,解出来的未知数就是丢的那个数据(Xi )。
- 情况其他,不用再举例子了吧,原理就是这么简单。原本要发送4个数据包,那么现在我发送5个数据包(有一个数据包是构造出来的),那么对方收到任意4个数据,都可以得到原本要收到的4个数据。
不闲扯了,原理讲完了,剩下的都是编程问题。
有人可能还有些小疑问,数据包怎么做乘法和加法运算???
有办法,把上面那些运算定义成伽罗华域的四则运算就行了,乘法就成了域的多项式乘法,计算机很容易实现;加法就是大家经常接触到(C语言中的)异或运算。
这些东西真的有人用吗?有的,QUIC协议中FEC了解一下,虽然没看过代码,QUIC协议中FEC实现得东西应该比我这个将要讲的方案简单很多,哈哈哈
用兴趣可以来信交流(vslinux@qq.com),我这里已经有完整的随机线性网络编码的C语言实现。
随机线性网络编码的C语言实现,实现可靠传输:原理(1)的更多相关文章
- 随机线性网络编码的C语言实现,实现可靠传输:实现篇(2)
伽罗华域(2^8)乘除法的编程实现
- 根据Unicode编码用C#语言把它转换成汉字的代码
rt 根据所具有的Unicode编码用C#语言把它转换成汉字的代码 var s = System.Web.HttpUtility.HtmlDecode(Utf8Str); var o = Newton ...
- Go语言数组和切片的原理
目录 数组 创建 访问和赋值 切片 结构 初始化 访问 追加 拷贝 总结 数组和切片是 Go 语言中常见的数据结构,很多刚刚使用 Go 的开发者往往会混淆这两个概念,数组作为最常见的集合在编程语言中是 ...
- C语言与汇编语言相互调用原理以及实例
C语言与汇编语言相互调用原理以及实例 1.原理 其实不管是C语言还是汇编语言想要执行都是最终编译链接成为二进制文件. 这里一定要明确编译和链接是两个步骤,生成的文件格式也是不一样的. 编译生成的文件是 ...
- 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. 动态参 ...
- 15、R语言聚类树的绘图原理
聚类广泛用于数据分析.去年研究了一下R语言聚类树的绘图原理.以芯片分析为例,我们来给一些样品做聚类分析.聚类的方法有很多种,我们选择Pearson距离.ward方法. 选择的样品有: "GS ...
- 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 包和引入语句 ...
- Shannon-Fano-Elias编码的C语言实现
Shannon-Fano-Elias编码 一.理论分析 Shannon-Fano-Elias编码是利用累积分布函数来分配码字. 不失一般性,假定取X={1,2,-m}.如果对于全部的x,有p(x)&g ...
- 随机以及时间相关函数——C语言描述
随机相关的函数 头文件 stdlib.h 相关函数 :rand .srand rand( rand C++ Reference ) 函数声明:int rand( void ); rand函数返回一个位 ...
随机推荐
- MobaXterm实时查看Linux服务器上的日志
一.工具 MobaXterm介绍 https://blog.csdn.net/juyin2015/article/details/79056687/ 1.,点击Session 输入服务器IP.用户名 ...
- php中 重载的方法
php中 重载(一)这个文章,谢谢.作为初学者,大牛勿喷: 基本是两个方法 __call,当调用对一个不可访问的对象方法时,会自动执行该魔术方法!(对象调用) 典型的两种处理方式: 1,给出友好的提示 ...
- Django与HTML业务基本结合--基本的用户名密码提交方法2
from django.shortcuts import render # Create your views here. from django.shortcuts import render de ...
- 陈云川的OPENLDAP系列
前言 本 来,我应该准备一篇精彩的演说辞,从LDAP应用的方方面面讲起,细数LDAP在各种场合应用的成功案例,大肆渲染LDAP应用的辉煌前景,指出有多少机 构和组织的关键业务是建立在LDAP的基础上的 ...
- SQL Server导入数据报错"无法在只读列“Id”中插入数据"
使用sql server 导入数据报错:无法在只读列'id'中插入数据.如下图所示: 查找出现该问题的原因是表中id为自动增长的标识列,需要在[编辑映射]中勾选"启用标识插入": ...
- 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU外设那些事(2)- 善变的FlexRAM
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的FlexRAM外设. 本文是外设系列第二篇,上一篇讲的是离内核最近的高速缓存L1 Cache, ...
- Direct2D 第1篇 最简单的D2D程序
原文:Direct2D 第1篇 最简单的D2D程序 编译之前,得先安装DirectX SDK #include <windows.h> #include <d2d1.h> #i ...
- [Vue CLI 3] 配置解析之 indexPath
在 vue.config.js 配置中有一个 indexPath 的配置,我们先看看它有什么用? 用来指定 index.html 最终生成的路径(相对于 outputDir) 先看看它的默认值:在文件 ...
- pygame-常用的方法
1.pygame常用的方法 2.语音 图片
- 外贸电子商务网站之Prestashop 设置网站基本信息
顶部banner图,首页各尺寸banner图.社交分享.物流支持.支付方式提醒等等设置 示例版本:1.6.1.11