纠错码和最小距离纠错

时间:2015-01-12 19:36:29

标签: algorithm matrix error-correction

我在网上看到了一个挑战(在King的网站上)虽然我理解它背后的一般想法但我有点迷失 - 也许措辞有点不对?这是问题,我将在下面说明我不理解的内容:

  

错误纠正码用于各种应用程序   从卫星通信到音乐CD。这个想法是   将长度为k的二进制字符串编码为长度为n> k的二进制字符串,   称为码字,即使编码的某些位是   损坏(如果你在你的CD上划伤),原始的k位   字符串仍然可以恢复。有三个重要参数   与纠错码相关联:码字的长度(n),   维度(k)是未编码字符串的长度,和   最后是代码的最小距离(d)。两者之间的距离   码字被测量为汉明距离,即汉明数   代码字不同的位置:0010和0100在距离处   2.代码的最小距离是彼此最接近的两个不同代码字之间的距离。线性代码是a   简单类型的纠错码,具有几个不错的属性。   其中之一是最小距离是最小距离   任何非零码字都必须为零码字(码字   由n个零组成的总是属于长度为n的线性代码。   长度为n且尺寸为k的线性码的另一个不错的特性是   它们可以用零和0的n×k生成矩阵来描述   那些。对k位字符串进行编码是通过将其视为列向量来完成的   并将其乘以生成矩阵。以下示例显示了一个   生成矩阵以及字符串1001如何编码。 graph.png矩阵   乘法照常完成,除了additon以模2完成   (即,0 + 1 = 1 + 0 = 1且0 + 0 = 1 + 1 = 0)。这段代码的代码字集是   然后只需通过编码所有k位获得的所有向量   以这种方式的字符串。编写程序来计算最小距离   对于几个长度最多为30和30的线性纠错码   维度最多15.每个代码将作为生成矩阵给出。   输入您将获得几个生成器矩阵作为输入。首先   line包含一个整数T,表示测试用例的数量。该   每个测试用例的第一行给出参数n和k   1≤n≤30,1≤k≤15且n> 1。 k,由两个整数分隔一个空格。   以下n行描述了生成矩阵。每行都是一行   矩阵的k空格分隔条目为0或1。   输出对于每个生成器矩阵,输出最小的单行   相应线性码的距离。

示例输入1

2

7 4

1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

0 1 1 1

1 0 1 1

1 1 0 1

3 2

1 1

0 0

1 1

示例输出1

3

0

现在我的假设是问题是“编写一个程序,它可以采用矩阵形式的线性代码,并说出最小距离来自全零代码字”我只是不明白为什么有一个3第一个输入的输出和第二个输入的输出是什么?

很困惑。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

第一个例子:

Input binary string: 1000
Resulting code: 1100001
Hamming distance to zero codeword 0000000: 3

第二个例子:

Input binary string: 11
Resulting code: 000
Hamming distance to zero codeword 000: 0

你的目标是找到有效非零码字(可以从一些非零k位输入字符串产生),汉明距离最小到零码字(用不同的词 - 用最少的二进制表示中的数量)并返回该距离。

希望有所帮助,问题描述确实有点难以理解。

修改即可。我在第一个例子中犯了错字。实际输入应 1 000 000 000 1 。此外,可能还不清楚输入字符串究竟是什么以及如何计算代码字。我们来看看第一个样本。

Input binary string: 1000

这个二进制字符串通常是生成器矩阵的一部分。它只是所有可能的非零4位字符串之一。让我们乘以生成矩阵:

(1 0 0 0) * (1 0 0 0) = 1
(0 1 0 0) * (1 0 0 0) = 0
(0 0 1 0) * (1 0 0 0) = 0
(0 0 0 1) * (1 0 0 0) = 0
(0 1 1 1) * (1 0 0 0) = 0
(1 0 1 1) * (1 0 0 0) = 1
(1 1 0 1) * (1 0 0 0) = 1

找到产生“最小”码字的输入的一种方法是迭代所有2 ^ k-1个非零k比特串并计算每个码字的码字。对于k <= 15,这是可行的解决方案。

第一个测试用例0011的另一个例子(可能有多个输入产生“最小”输出):

(1 0 0 0) * (0 0 1 1) = 0
(0 1 0 0) * (0 0 1 1) = 0
(0 0 1 0) * (0 0 1 1) = 1
(0 0 0 1) * (0 0 1 1) = 1
(0 1 1 1) * (0 0 1 1) = 2 = 0 (mod 2)
(1 0 1 1) * (0 0 1 1) = 2 = 0 (mod 2)
(1 1 0 1) * (0 0 1 1) = 1

结果代码0011001还具有零码字的汉明距离3。没有4位字符串,其代码在二进制表示中少于3个。这就是为什么第一个测试用例的答案是3。