读改变未来的九大算法笔记03_纠错码

news2025/1/14 18:12:29

 

1. 真正根源

1.1. 在电报和电话等通信系统中出现的

1.2. 理查德·汉明创造了第一批纠错码:一种近乎神奇的能侦测并纠正计算机数据中错误的算法

2. 信息理论学的一部分

2.1. Information Theory

2.2. 香农通过数学展示了有可能从根本上通过一个嘈杂的、引发错误的链接实现错误率极低的通信

2.3. 即便是极端不可靠的通信频道也可以以极低的错误率传输数据

2.4. 没有纠错码,计算机和通信系统就会比现在慢很多,功能弱许多,可靠性也会差很多

3. 计算机三项基本工作

3.1. 执行计算

3.2. 存储数据

3.3. 传输数据

4. 错误侦测及纠正的需求

4.1. 计算机要无误地存储和传输的信息量绝对是海量

4.2. 精确度达到99.999 9%也还是不够好

4.3. 必须能在存储和传输数十亿“块”信息的情况下,不犯任何一个错误

5. 杂项

5.1. overhead

5.2. 为确保消息被正确接收而发送的多余信息

5.3. 一个纠错系统的“杂项”就是在发送消息本身以外要发送的额外信息量

6. 重复把戏

6.1. 同时侦测和纠正数据中错误的方法

6.2. 要确保一些信息被正确地传输,只需重复几次该信息

6.3. 通过重复一条不可靠的消息足够多次,就可以让消息的可靠性高到让你满意为止

6.4. 假设错误随机发生。相反,如果一个恶意实体故意干扰传输,并选择制造某些错误,重复把戏都会变得不可靠

6.5. 通过使用重复把戏,不可靠通信的问题能够被解决,错误基本上能被消灭

6.6. 你发送的额外东西就是更多份原始消息

6.6.1. 杂项数量巨大,因为必须发送数份完整消息

7. 代码字

7.1. code words

7.2. 示例

7.2.1. “one”(一)、“two”(二)、“three”(三)

8. 冗余把戏

8.1. The Redundany Trick

8.2. 同时侦测和纠正数据中错误的方法

8.3. 基本原则

8.3.1. 你不能只发送原始消息,你要发送一些多余的东西以增加可靠性

8.4. 示例

8.4.1. “5 213.75”

8.4.1.1. five two one three point seven five

8.4.1.2. fiqe kwo one thrxp point sivpn fivq

8.4.1.3. 使用了一条冗余消息,所以对消息中的任何单个变化进行可靠侦测及纠正变得可行

8.4.2. 数字“367”代表了一个数

8.4.2.1. 因为这条消息中没有冗余,其中一个数字被替换,就没办法知道原始数字是多少

8.5. (7,4)汉明代码(Hamming code)

8.5.1. 理查德·汉明于1947年在贝尔实验室发明的代码之一

8.5.2. 所有事情都通过0和1完成

8.5.2.1. 现实生活中使用的所有代码也限用这两个数字

8.5.3. 在编码时,每一组4位数字都加入了冗余,由此产生了一个7位数的代码字

8.5.4. 在解码时,你首先要为接收的7位数寻找完全匹配,如果寻找完全匹配失败,就选择最接近的匹配

8.5.5. 7位数代码字中的任何错误都能得到确定无疑的纠正

8.5.6. 只能纠正7位数代码字中的一个错误

9. 校验和把戏

9.1. 不管纠错,而是将精力集中在侦测错误上

9.2. The Checksum Trick

9.3. “check”(校验)消息的“sum”(和)就是术语“checksum”(校验和)的由来

9.4. 假设我们所有的消息都只由数字组成会更方便些

9.4.1. 这是一个非常真实的假设,因为计算机用数字存储所有的信息,只有在向人展示信息时,才把数字转译成文本或图像

9.5. 简单校验和

9.5.1. Simple Checksum

9.5.2. 只需将消息中的所有数字相加,只保留结果的最后一位数,剩下的数字就是你的简单校验和

9.5.3. 只需在发送原始消息前,将原始消息的校验和附加到消息末尾即可

9.5.4. 如果只有一个错误,简单校验和绝对能保证侦测到它

9.5.5. 两个或更多错误,简单校验和或许能侦测到它们,但也有可能侦测不到

9.5.6. 示例

9.5.6.1. 4 6 7 5 6

9.5.6.2. 4+6+7+5+6=28

9.5.6.3. 只保留最后一位数8

9.5.6.4. 4 6 7 5 6 8

9.5.7. 只能保证对相对较短的消息奏效(少于10位数)

9.6. 阶梯校验和

9.6.1. Staircase Checksum

9.6.2. 像之前一样把数字相加,但每个数都要和该数字所在位阶数相乘,每个数都比前一个数大一个位阶

9.6.2.1. 楼梯台阶编号为1、2、3……依此类推

9.6.3. 示例

9.6.3.1. 4 6 7 5 6

9.6.3.2. (1×4)+(2×6)+(3×7)+(4×5)+(5×6)=4+12+21+20+30=87

9.6.3.3. 只保留最后一位数7

9.6.3.4. 4 6 7 5 6 7

9.6.4. 只能保证对相对较短的消息奏效(少于10位数)

9.7. 首先是简单校验和,其次是阶梯校验和

9.7.1. 4 6 7 5 6

9.7.2. 4 6 7 5 6 8 7

9.7.3. 可以保证这条消息要么是正确的,要么至少有三处错误

9.7.4. 只要错误不超过两处,你就都能够侦测到错误

9.7.5. 只能保证对相对较短的消息奏效(少于10位数)

9.8. 加密哈希函数(Cryptographic Hash Function)的特定校验和

9.8.1. 软件包的校验和比不上软件包大小的十万之一

9.8.2. 使用这种长度的校验和侦测错误,其失败的概率极其微小,在现实中几乎不可能失败

9.8.2.1. 尤其是在恶意敌人而非糟糕信道的随机变动对信息做出改变时

10. 定位把戏

10.1. The Pinpoint Trick

10.1.1. 能让你迅速定位一处错误

10.2. 二维奇偶校验码

10.2.1. Two-Dimensional Parity

10.2.2. 被形容为二维,是因为消息被放在有两个维度的表格(行和列)中

10.3. 如果你有一条长消息,就将其打碎成16位数长的“块”,并单独处理每“块”数据

10.4. 如果消息比16个数字短,就用0把它补成16位数

10.5. 示例

10.5.1. 4 8 3 7 5 4 3 6 2 2 5 6 3 9 9 7

10.5.2.

4 8 3 7

5 4 3 6

2 2 5 6

3 9 9 7

10.5.2.1. 重新排列成一个从左往右、自上向下读的方框

10.5.3.

4 8 3 7 2

5 4 3 6 8

2 2 5 6 5

3 9 9 7 8

10.5.3.1. 算每一行的校验和,并添加在每行的右侧

10.5.4.

4 8 3 7 2

5 4 3 6 8

2 2 5 6 5

3 9 9 7 8

4 3 0 6

10.5.4.1. 算每一栏的简单校验和,并将其添加在每列的底部

10.5.5. 4 8 3 7 2 5 4 3 6 8 2 2 5 6 5 3 9 9 7 8 4 3 0 6

10.5.5.1. 重新排列所有数,让其能以一次一个数的方式被存储或传输

10.5.5.2. 从左往右、自上向下的方式读数

10.5.6. 4 8 3 7 2 5 4 3 6 8 2 7 5 6 5 3 9 9 7 8 4 3 0 6

10.5.7.

4 8 3 7 2 2

5 4 3 6 8 8

2 7 5 6 5 0

3 9 9 7 8 8

4 3 0 6

4 8 0 6

10.5.7.1. 不同之处的位置正好说明了通信错误出现的位置

10.5.7.2. 错误同时被定位和纠正了

11. 里德–所罗门(Reed-Solomon)代码

11.1. 能被用来纠正每个代码字中的众多错误

11.2. 基于一个名为有限域代数(Finite Field Algebra)的数学分支,结合了阶梯校验和及二维定位把戏的特色

11.3. CD、DVD和计算机硬盘中都用到了

12. 现实中的运用

12.1. 一般用于侦测而非纠正错误

12.2. 以太网

12.2.1. CRC-32

12.3. 软件包

12.3.1. MD5

12.3.1.1. 约40位数

12.3.2. SHA-1

12.3.2.1. 约50位数

12.3.3. SHA-256

12.3.3.1. 约75位数

12.3.4. SHA-512

12.3.4.1. 约150位数

12.4. 低密度奇偶校验码(Low-Density Parity-check Codes)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/607750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日学术速递6.1

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.LayoutGPT: Compositional Visual Planning and Generation with Large Language Models 标题:LayoutGPT:具有大型语言模型的组合视觉规划和生成 作者&…

Linux开发工具:gcc和g++

目录 一. 什么是gcc和g 二. gcc的基本使用方法 三. 库和链接 3.1 动态库和静态库 3.2 动态链接和静态链接 四. Debug和Release 五. makefile和make 六. 总结 一. 什么是gcc和g gcc:Linux下编译C语言程序的编译器g:Linux下编译C代码的编译器 由…

Apache网页的优化与安全

文章目录 Apache 网页的压缩Apache的页面缓存Apache页面隐藏版本信息Apache页面设置防盗链 Apache 网页的压缩 检查压缩模块 apachectl -t -D DUMP_MODULES | grep "deflate"安装mod_deflate 模块 如果没有安装mod_deflate 模块,重新编译安装 Apache 添…

嵌入式STM32中时钟系统详细分析

1. STM32的时钟源主要有: 内部时钟 外部时钟 锁相环倍频输出时钟 1.1 详细介绍 HSI(内部高速时钟) 它是RC振荡器,频率可以达到8MHZ,可作为系统时钟和PLL锁相环的输入。 HSE(外部高速时钟) 接入晶振范围是4-16MHZ…

深入理解设计原则之组件构建原则【软件架构设计】

系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 深入理解设计模式系列 高级C并发线程编程 组件构建原则 系列文章目录1、组件构建原则的定义和解读1、组件2、组件聚合2.1、复用/发布等同原则(REP)2.2 、共同闭包原则(CCP&…

C++(6):函数

函数基础 典型的函数包括:返回类型、函数名字、由 0 个或多个形参组成的列表以及函数体。 通过调用运算符(call operator)来执行函数。 调用运算符的形式是一对圆括号,它作用于一个表达式,该表达式是函数或者指向函数…

1731_makefile编写小结1_编译同目录下的文件

全部学习汇总: GreyZhang/g_makefile: Learn makefile from all kinds of tutorials on the web. Happy hacking and lets find an common way so we may dont need to touch makefile code any more! (github.com) 欢迎路过的YUAN类朋友相互交流,以下是…

每日学术速递6.2

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CL 1.BiomedGPT: A Unified and Generalist Biomedical Generative Pre-trained Transformer for Vision, Language, and Multimodal Tasks 标题:BiomedGPT:用于…

chatgpt赋能python:Python反向99乘法表:简单易学的终极练习

Python反向99乘法表:简单易学的终极练习 Python是一门强大而又容易上手的编程语言,而反向99乘法表则是一个极佳的练手项目。不仅能锻炼Python的基本语法和逻辑思维,同时也能体现出代码的风格和美感。本文将以Python反向99乘法表为例&#xf…

基于matlab仿真L形金属块基于时间温度分布图

一、前言 此示例说明了如何使用 Simulink 3D 动画™和 MATLAB 接口来操作复杂对象。 在此示例中,矩阵类型的数据在 MATLAB 和虚拟现实世界之间传输。使用此功能,您可以实现大量的颜色变化或变形。这对于可视化各种物理过程很有用。 我们在L形金属块中使用…

Chain of Thought Prompting和Zero Shot Chain of Thought初步认识

1. 思维链提示(Chain-of-Thought Prompting) 思维链(Chain-of-Thought:CoT)提示过程是一种最近开发的提示方法,它鼓励大语言模型解释其推理过程。下图显示了 few shot standard prompt(左)与链式思维提示过程(右&…

ChatGPT提示词攻略之基本原则

下面是调用openai的completion接口的函数。但在本文中并不是重点。了解一下就好。 import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv())openai.api_key os.getenv(OPENAI_API_KEY)def get_completion(prompt, model"gp…

[LeetCode周赛复盘] 第 348场周赛20230604

[LeetCode周赛复盘] 第 348场周赛20230604 一、本周周赛总结6462. 最小化字符串长度1. 题目描述2. 思路分析3. 代码实现 6424. 半有序排列1. 题目描述2. 思路分析3. 代码实现 6472. 查询后矩阵的和1. 题目描述2. 思路分析3. 代码实现 6396. 统计整数数目1. 题目描述2. 思路分析…

10.全局配置 app.json 与页面配置

常用的配置项有 pages 小程序的所有页面window 小程序窗口的外观tabBar 小程序底部的tabBar效果,就是底部的切换那部分style 组件样式版本 目录 1 window 2 tabBar 3 页面配置 1 window 小程序由下面三个部分组成,window可以配置 导航栏区域 与…

JavaSE_day43(多线程单线程区别,图解main方法若是单多线程该如何执行,如何使用多线程2种方式)

1 A.java * 学习多线程之前,我们先要了解几个关于多线程有关的概念。 A:进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定…

【生成数据】绘制简单的折线图

使用scatter绘制散点图并设置其样式 plt.scatter(2, 4, s200)#设置图表标题并给坐标轴加上标签 plt.title("Square Number", fontsize24) plt.xlabel("Value", fontsize14) plt.ylabel("Square of Value", fontsize14)#设置刻度标记的大小 plt.…

2022年,Rust与Go哪一个更好?

这是每一个程序员和开发人员都问过的问题,还有很多人仍然在问,即使他们已经做出了自己的决定。Rust vs. Go。2022年,我应该选择哪一个?或选择哪种语言--Golang或Rust。 Golang和Rust是目前使用的最年轻的编程语言。Go于2009年在谷…

最新ChatGPT4.0Plus开通教程-支付宝购买苹果礼品卡-亲测可用

2023.06.04亲测可用ChatGPT开通Plus教程 前言:一、准备工作二、购买苹果礼品卡一、官网购买礼品卡二、支付宝方式购买 三、AppStore充值礼品卡四、ChatGPT Plus 订阅五、iOS 端 ChatGPT Plus 订阅失败解决方法六、美区AppStore账号ID注册教程: 之前&…

【Svelte】一个简单的前端框架

Svelte.js的学习成本高吗? Svelte是新手编码初学者的完美平台。只需一个HTML/CSS和JavaScript技能组合,您就可以从头开始构建您的第一个网站,而无需额外的知识。 这使得学习曲线非常小,不像它的大多数替代方案。除此之外&#xf…

ChatGLM-6b 多任务微调

ChatGLM-6b也是一种预训练模型,它也可以通过微调来适应下游任务。实验表明,使用ChatGLM-6b微调和Bert类预训练模型微调的效果相近。如果采用多任务设计,ChatGLM-6b的效果会更好。你可以在这里了解更多关于ChatGLM-6B的信息: ChatGLM-6Bhttps:…