algorithm - 编码/纠错挑战

标签 algorithm math encoding error-correction

将 4 字节的初始消息编码为 8 字节在数学上是否可行,如果 8 字节中的一个字节被完全丢弃,而另一个字节是错误的,则可以重建初始的 4 字节消息?将无法重新传输,也不会知道丢失字节的位置。

如果使用在 4 个“数据”字节末尾附加 4 个“奇偶校验”字节的 Reed Solomon 纠错,例如 DDDDPPPP,您最终会得到 DDDEPPP(其中 E 是一个错误)和一个奇偶校验字节已被丢弃,我不相信有一种方法可以重建初始消息(尽管如果我错了请纠正我)...

如何将初始 4 字节消息乘以一个常量(或执行另一项数学运算),然后利用逆数学运算的属性来确定丢弃的字节。或者,对消息的结构施加一些限制,以便每隔一个字节都需要是奇数,而其他字节需要是偶数。

或者,它也可以是 4 个十进制数字,而不是字节,以某种方式编码为 8 个十进制数字,在上述相同情况下可以检测和纠正错误 - 没有重传,丢失字节的位置未知.

我正在寻找任何人可能有的疯狂想法...有什么想法吗?

编辑:

这可能有点做作,但我要解决的情况是您有一台有故障的打印机,该打印机将重要数字打印到表格上,然后将其邮寄给处理公司它使用 OCR 阅读表格。 OCR 不会是完美的,但它应该接近于只读取数字。有故障的打印机可能是一个更大的问题,它可能会掉落一个整数,但无法知道它会掉落哪个,但它们总是会以正确的顺序出现,不会交换任何数字。

可以更改表格,以便它始终在前四个数字和纠错数字之间打印一个空格,即 1234 5678,这样就可以知道是丢弃了 1234 初始数字还是丢弃了 5678 纠错数字,如果这使问题更容易解决。我的想法有点类似于他们通过算法验证信用卡号的方式,但以四位数的形式进行。

希望这能澄清我正在寻找的东西......

最佳答案

在没有“漂亮”的代数结构的情况下,我怀疑很难找到一个简明的方案让你一直到 10**4 个代码字,因为信息理论上,没有太多的松弛。 (下面的那个可以用 GF(5) for 5**5 = 3125。)幸运的是,这个问题足够小,你可以试试 Shannon 的贪心代码构造方法(找到一个与已经选择的代码字不冲突的代码字,将其添加到集合中)。


将最多 35 位编码为 GF(128) 上的四次多项式 f。在八个预定点 x0,...,x7 计算多项式并编码为 0f(x0) 1f(x1) 0f(x2) 1f(x3) 0f(x4) 1f(x5) 0f(x6) 1f(x7),其中交替的 0 和 1 存储在 MSB 中。

解码时,先看MSB。如果 MSB 与索引 mod 2 不匹配,则该字节已损坏和/或已被删除左移。假设它很好并将其向右移动(可能在一个点上累积多个不同的可能值)。现在我们在已知点至少有七次四次多项式 f 的评估,其中最多有一次是错误的。我们现在可以尝试腐败的所有可能性。

编辑:bmm6o 声称我的解决方案的第二部分不正确。我不同意。

让我们回顾一下 MSB 为 0101101 的情况的可能性。假设 X 是发送的字节数组,Y 是接收的字节数组。一方面,Y[0]、Y[1]、Y[2]、Y[3] 具有正确的 MSB,并被假定为 X[0]、X[1]、X[2]、X[3] .另一方面,Y[4]、Y[5]、Y[6] 的 MSB 不正确,被推测为 X[5]、X[6]、X[7]。

如果 X[4] 被丢弃,那么我们对 f 有七个正确的评估。

如果 X[3] 被丢弃并且 X[4] 被破坏,那么我们在 3 处有一个错误的评估,以及六个正确的评估。

如果 X[5] 被丢弃并且 X[4] 被破坏,那么我们在 5 处有一个错误的评估,以及六个正确的评估。

除此之外还有更多的可能性,但我们永远不会少于六个正确的评估,这足以恢复 f。

关于algorithm - 编码/纠错挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2393362/

相关文章:

algorithm - 如何最佳解决这个问题?

python - 最长递增序列的最大值

math - 如何计算 Asus Xtion Pro Live 传感器的可见边界

c# - 在 .NET 中识别替代日期(在 PowerShell、C# 或 VB 中)

algorithm - 将递增整数范围映射到以 26 为基数的六位数最大值,但不可预测

encoding - XSD 中字符串数据类型的 maxLength 限制是否应基于预编码或后编码数据?

python - 多类问题的单热编码类标签的正确方法

c++ - RGB 缓冲区到 JPEG 缓冲区,这里有什么问题?

algorithm - Extract-Min - Fibonacci 堆的最长时间

algorithm - 有没有超快的算法可以在图片上找到线条?