随机线性网络编码的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函数返回一个位 ...
随机推荐
- Java IO:如何得到Jar包中内嵌Jar包的时间戳
ClassLoader bladeClassLoader = BladeCLI.class.getClassLoader(); URL url = bladeClassLoader.getResour ...
- Oracle 行转列及列转行
参考网址:http://blog.163.com/fushahui_1988@126/blog/static/82879994201192844355174/ 一.多行转一列select id, vn ...
- C++学习笔记----4.5 C++继承时的对象内存模型
推荐阅读:http://blog.csdn.net/randyjiawenjie/article/details/6693337 最近研究了一下,C++继承的内存对象模型.主要是读了读http://b ...
- 微服务Eureka使用详解
Eureka是spring cloud中的一个负责服务注册与发现的组件.遵循着CAP理论中的A(可用性)P(分区容错性). 一个Eureka中分为eureka server和eureka client ...
- 【水滴石穿】mobx-todos
我觉得代码在有些程序员手里,就好像是画笔,可以创造很多东西 不要觉得创意少就叫没有创意,每天进步一点点,世界更美好 首先源码地址为:https://github.com/byk04712/mobx-t ...
- VC程序异常中断的原因
自己编写的VC程序,编译调试通过,运行良好,然后关闭运行界面,就弹出一个“已经触发一个中断”的提示,然后断点就停在了下面这个中断处. _CRTIMP void _cdecl _CrtDbgBreak( ...
- 六.基本数据结构-双端队列(Deque)
一.双端队列(Deque) - 概念:deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变. - 特性:deque 特殊之处在于添加和删除项是非限制 ...
- Spring → 01:概述
一.了解Spring发展 Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Dev ...
- HDU4251-The Famous ICPC Team Again(划分树)
Problem Description When Mr. B, Mr. G and Mr. M were preparing for the 2012 ACM-ICPC World Final Con ...
- 信息摘要算法 MessageDigestUtil
package com.xgh.message.digest.test; import java.math.BigInteger; import java.security.MessageDigest ...