海明码的基本原理

一、什么是海明码

首先来看一下百度的介绍:

‌‌海明码(‌Hamming Code)‌是一种具有检错和纠错能力的编码方式,由‌理查德·汉明(Richard Hamming)于1950年提出。它通过增加少数几个校验位,能够检测出两位同时出错的情况,也能检测出一位出错并自动恢复其正确值,这种自动纠错的能力是海明码的主要特点之一。海明码不仅具有检测错误的能力,还能指出错误的具体位置,从而为进一步的自动纠错提供了依据。‌

  简单来说,如果海明码的一位或者两位数据位发生了错误,我们一定可以通过海明码的特性判断出来,如果是多位数据发生了错误,我们可能可以判断出来,如果只有一位发生错误,我们还可以定位出来具体的数据位。

在这里插入图片描述

二、校验位的分布方式

1、奇偶校验

  在了解海明码之前,我们先简单了解奇偶校验,例如一个二进制数据:
在这里插入图片描述

  思考一下,如果现在需要添加一个校验位,那么这个校验位应该填1还是填0呢?
  如果是奇校验的话,我们需要保证所有数据位和校验位的值加起来是一个奇数。
  如果是偶校验的话,我们需要保证所有数据位和校验位的值加起来是一个偶数。

在这里插入图片描述

2、海明码校验位

  为什么要介绍奇偶校验?因为海明码校验位的确定就是根据奇偶校验来的,对于校验位,我们可以全部用奇校验来确定,也可以全部使用偶校验来确定,但是不可以混合使用,当你学完本文以后,再回来理解这句话就很清晰了。如果没有特别说明,那么海明码默认使用的就是偶校验,这是一个约定俗成的规定,我们只有知道海明码使用的是哪个校验方式才可以对数据进行检错和纠错。

  还是用10001这个数据作为例子,下面将使用偶校验设计海明码,先看海明码的两个性质:
  (1)校验位均在在2k上,例如1,2,4,8,16,32,64,128。

在这里插入图片描述

  如果是数据是1000,那么8号数据位也是没有意义的,故只需要2位数据位,这样就不难理解,为什么有2k>k+m这个公式了,k是校验位的个数,m是数据位的个数。

  (2)如果使用1、2、3、4…给海明码的码位标号,把号码转成二进制,那么第n位的二进制位是1的组合将满足偶校验,这个看文字不好理解,看下图就懂了。

在这里插入图片描述

在这里插入图片描述

三、检错原理

  海明码的检错原理很简单,就是按照分组验证每一组是都否符合偶校验,符合那就可能没出错,不符合那就一定出错了。如果是一位或者两位出错了,那么一定可以被检测出来,这点可以自行验证,如果验证出来了,说明你已经彻底掌握海明码了!

  下面通过例子理解一下一位出错的情况,例如10001的海明码011000011变成了011000111,再次查看各组的偶校验情况,发现含有7号元素的组都不符合偶校验了。

在这里插入图片描述

四、纠错原理

  不难可以推论出分组的规律,1、2、4、8、16、32、64、128、256…分别代表第一组、第二组、第三组、第四组、第五组、第六组…等等,其实就是二进制的每一位代表一组,可以简单的通过编号就可以看出一个数属于哪几个组的了。

在这里插入图片描述

  那么加入只有一个码位发生了错误,它所在所有的组都将不符合偶校验,例如3号出错,1、2组不符合偶校验,9号出错,1、4组不符合偶校验。

  现在我们反过来推论,假如在只有一个码位发生了错误的前提下,某一个码位所在的所有分组都不符合偶校验,那么这个码位就是出错的码位了。

  当然啊,这是在只有一个码位发生了错误的前提下才成立的,多个码位发生了错误的话是没办法纠错的,并且,有极小的概率,多个码位发生错误时,通过海明码无法校验出来,因为无法排除发生错误后各组的偶校验仍然成立的情况。

至此,海明码的基础原理与应用就学完喽

加油呀!兄弟们!!!

感谢观看,点个赞支持一下吧!

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧林墨烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值