从海明校验码深入了解

2023-11-09

首先,海明校验码的学习看视频没看明白,看了博客有所感悟
1、海明校验码不是万能的,根据信息论也知道不可能

写在海明校验码之前

海明校验码的原理和我之前遇到的一道题目很像,10只老鼠试验1024瓶药是否有毒
有1024瓶药,其中已知有1瓶且只有1瓶有毒,老鼠吃了毒药1h之后会死亡,现在有10只老鼠,给你1h时间,找出那瓶毒药(不考虑老鼠喝药之间,只需要考虑药效时间,意思就是一次性找到,而不是分多次尝试)
1、信息论上有这么个知识,老鼠喝药之后有2种可能性,活着或死掉,10只老鼠的生或死,总共有多少种可能性呢,2的10次方,就是1024,而药恰好1024瓶,根据信息论,存在一种方案,可以仅通过一次校验,就能找到那瓶毒药
2、方案就是:将1024瓶药按0-1023进行编号,按二进制进行展示就是从0000000000至1111111111,第一只老鼠需要喝第一位为1的药,第k只老鼠喝第k位为1的药,可怜的老鼠,每只要喝512种药
3、根据1h后死掉的老鼠,就可以知道哪瓶药有毒,比如第1、3、5、7只老鼠死掉,有毒的就是第1010101000瓶,如果第0000000000瓶药有毒,那就是最幸运,所有老鼠都活着,最不幸的就是1111111111号有毒

简单的校验码
比如身份证号的最后一位,就是一个校验码,将前17位数字进行某种计算,对11取余,对于11种结果(0-9和X)
二进制中,可以对前面数字的和对2取余
使用单数字进行取余有什么不足?
1、如果有2位有变动,就会误以为是正确结果
2、就算知道错了,也无法进行纠错

奇偶校验
奇校验:这串序列1的个数如果为偶数则在前面加个1,使1的个数变成奇数,否则加0
偶校验:这串序列1的个数如果为奇数则在前面加个1,使1的个数变成偶数,否则加0

什么是海明校验码?
1、选出哪些试药的小白鼠,2的k次方位,二进制表示就是 1、10、100、1000…
2、其他非校验位位置,根据自己的位置编号,明确自己要参与到哪些位置的计算,如位置位10101的,要参与10000、00100、00001的计算
3、校验位根据需要校验的数字,进行奇偶校验,得到数值

根据原理得到的
1、因为使用奇偶校验,如果某一位错了两回,等于没错,所以可以进行1位的纠错,2位的检测错误,3位及以上的错误不一定能查到,如 011、101、110错了,那恰好校验都能通过(都是错两回,等于没错)[出错概率很低,这么出错概率更低]
2、位数越长,海明校验码的占用比例越低,可以验证的位数相对于海明校验码的数量是指数级增长的

举例
需要将1010 1000 0101加上海明校验码

1、数位数,总共是12位,需要5位海明校验码。(2^4-4-1=11,所以4位海明校验码不够)
2、将海明码填充??1?010?1000010?1
3、将数值为1的位置进行2进制表示
00011
00110
01001
01110
10001
进行偶校验得到
10011
进行填充
11100100100001011

写在最后

学习越久,越觉得算法有用,之前的跳表的算法题,和这次海明校验码,没有良好的算法基础,真的很难理解
博观而约取,厚积而薄发。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从海明校验码深入了解 的相关文章

  • linux 批量解压gz文件夹,linux 批量解压gz bz2文件

    一 批量解压bz2文件 find maxdepth 1 name bz2 xargs i tar xvjf 这条命令可解压当前目录下的所有bz2文件 批量解压是比较郁闷的事 以前尝试各种方法 甚至用脚本循环语句解压都不行 现在发现这条命令可

随机推荐

  • JSON对象转换成Byte(字节)数组

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 如果你不了解JSON对象 请看这里 JSON对象转换成 byte 数组 Byte byteArray Byte jsonData bytes NSLog s byteArr
  • 如何追踪泄漏者信息?软件保护工具VMProtect独有水印快速锁定目标!

    VMProtect是一种很可靠的工具 可以保护应用程序代码免受分析和破解 但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下 才能实现最好的效果 VMProtect提供了一种独特的功能 可以将有关受保护文件所有者的隐
  • 基于Python的微博大数据舆情分析,舆论情感分析可视化系统

    运行效果图 基于Python的微博大数据舆情分析 舆论情感分析可视化系统 系统介绍 微博舆情分析系统 项目后端分爬虫模块 数据分析模块 数据存储模块 业务逻辑模块组成 先后进行了数据获取和筛选存储 对存储后的数据库数据进行提取分析处理等操作
  • LeetCode 541. 反转字符串 II

    题目链接 https leetcode cn problems reverse string ii C 代码如下 class Solution public string reverseStr string s int k int n s
  • vant ui Swipe pc端滑动失效

    这里我使用了vant的Swipe组件 由于vant是移动端的组件库 对pc端会有兼容性问题 例如Swipe 移动端是 touch 该组件做了相应的监听 而PC端是 mouse 没有做对应的监听 因此在pc端无法用鼠标拖动图片 1 安装插件
  • redis BITFIELD详解

    支持子命令和整型 本命令会把Redis字符串当作位数组 并能对变长位宽和任意未字节对齐的指定整型位域进行寻址 下面是已支持的命令列表 GET
  • MYSQL深入学习(一)

    1 mysql 体系结构 连接池组件 管理服务和工具组件 sql接口组件 查询分析器组件 优化器组件 查询缓存组件 插件式存储引擎 mysql的特点 可以根据需求 动态的配置存储引擎 物理文件
  • idea控制台输出中文乱码解决

    解决Intellij IDEA控制台logger info system out println等中文乱码问题 一 编写环境乱码 二 控制台打印乱码 又包含3种 当我们使用Intellij IDEA开发时 首当其冲就是中文乱码问题 造成中文
  • unity物体范围内随机生成

    这个脚本需要挂载到需要随机生成的物体上 但不能是空物体 using System Collections using System Collections Generic using UnityEngine public class Ran
  • CDN回源原理和CDN多级缓存

    一 CDN概念 CDN的全称是Content Delivery Network 即内容分发网络 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节 使内容传输的更快 更稳定 CDN是通过在网络各处放置节点服务器所构成的
  • STL案例——评委打分案例

    有5名选手 选手ABCDE 10个评委分别对每一名选手打分 去除最高分 去除评委中最低分 取消平均分 1 创建五名选手 放到vector中 2 遍历vector容器 取出每一个选手 执行for循环 可以把10个评分打分存到deque容器中
  • Rxjs在Angular中的简单应用

    Angular中集成了Rxjs库 Rxjs是javascript的一个响应式编程库 它提供了很多api 可以很方便的处理和操作应用中的数据 我们在自己的angular项目中新建一个组件 ng generate component rx bu
  • Java多线程两种实现

    在java中实现多线程的方式有两种 一种是继承Thread类 另一个是实现Runnable接口 对于两种实现 各有优缺点 接下来进行对比总结一下 这两种方法 都可以实现多线程 以下为两种实现的写法 继承Thread类的方式 package
  • 五、语言特性之<=default,=delete、using、noexcept、override、final、以及和const对比>

    目录 一 default delete 1 首先我们要回顾一下编译器提供的默认函数 2 何时需要自定义big three 构造函数 拷贝构造 拷贝赋值 big five 新增移动构造函数 移动赋值函数 3 default delete关键字
  • Yearning做SQL审核

    系统环境 Centos7一 Inception安装 1 安装相关依赖包 yum install bison ncurses libs libncurses5 devel ncurses devel wget git cmake openss
  • C++模板特例化

    模板是用来写一些独立化特定类型的代码 但是对于有些类型 在处理时 细节上却有所差别 常见的如char 如 现在你打算写一个栈 可以用于任何数据类型 那你肯定首先想到的就是模板啦 template
  • LeetCode-797. All Paths From Source to Target

    Given a directed acyclic graph of N nodes Find all possible paths from node 0 to node N 1 and return them in any order T
  • 【满分】【华为OD机试真题2023 JAVA&JS】知识图谱新词挖掘1

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 知识图谱新词挖掘1 知识点滑窗 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 小华负责公司知识图谱产品 现在要通过新词挖掘完善知识图谱 新词挖掘 给出一个待挖掘
  • C++ Primer 学习笔记 第十五章 面向对象程序设计

    面向对象程序设计 OOP 基于三个概念 数据抽象 只暴露类的接口 而如何实现的是不透明的 即类的接口和实现分离 继承 能实现相似的类型 动态绑定 忽略相似类型的区别 以统一方式使用它 继承关系联系在一起的类构成层次关系 在最低层有一个基类
  • 从海明校验码深入了解

    首先 海明校验码的学习看视频没看明白 看了博客有所感悟 1 海明校验码不是万能的 根据信息论也知道不可能 写在海明校验码之前 海明校验码的原理和我之前遇到的一道题目很像 10只老鼠试验1024瓶药是否有毒 有1024瓶药 其中已知有1瓶且只