【问题标题】:Algorithm: Minimal Encoding, Error Correction, Please Help?算法:最小编码,纠错,请帮忙?
【发布时间】:2010-01-21 22:48:14
【问题描述】:

假设有一个全为零的 1024 位数组:

示例:[0,0,0,0,0,0,0,...]

然后我在完全随机的位置用 1 覆盖 20 个零:

示例:[0,1,0,0,0,0,0,...]

假设我有一个完美的编码器,对这 20 个随机放置的位的位置进行编码所需的理论最小位数是多少?

我知道有通信理论方程可以告诉我这一点,但我想仔细检查我的计算。

更难的奖励问题:向我展示实现接近此最小限制的编码的算法的代码。

额外奖励:如果位翻转到字节级别而不是位级别怎么办?例如整个字节翻转。结果一样?

【问题讨论】:

  • 那么现在有 1044 位还是只有 1024 位?
  • 我的意思是覆盖,而不是插入,很好。还有1024位。

标签: compression forwarderrorcorrection delta-row-compression


【解决方案1】:

上限(log2(1024 选择 20)) = 139 位

(calculation on Wolfram Alpha)

其他答案说 143 位遗漏了我们知道 正好 20 个。这是一个具体的编码来展示使用该知识的一种方法:使用arithmetic coding,连续发送1024个“0”或“1”符号中的每一个。第一个符号以 20/1024 的概率为“1”加权;但是后面的每个符号的权重都不同。如果第一个符号是“0”,则在下一个符号上使用 20/1023;但如果是“1”,请使用 19/1023。以同样的方式继续到最后。只要我们告诉它正确的概率,算术编码就会做所有艰苦的工作以适应大约 139 位。

关于“奖金”:错误更正不在原始问题中。您可以在假设没有错误的情况下首先找到最佳编码的基础上添加纠错代码,就像上面一样(这通常是解决问题的好方法)。这样你不会失去任何编码效率,尽管我认为你可能会失去稳健性——例如,如果你得到的错误多于你的 ECC 可以纠正的错误,那么消息会以完全垃圾的形式出现,还是会更优雅地降级?

【讨论】:

  • 我很高兴能弄清楚为什么会这样。太好了。
  • 那么有什么编码算法的想法吗?
  • 错误的位置是提前知道的,正如我在这个问题中所展示的那样。我只想用我能做到的绝对最小字节数对这些错误的位置进行编码。
  • 啊,我不清楚这些 1 位代表错误。那确实会改变答案,但是您可以以相同的方式处理它;答案可能看起来更复杂。
  • 此外,这恰好是 20 个错误是非常学术性的——我从未听说过任何有助于注入总是 20 个错误,而不是 19 或 21 个错误的错误源。:-) 我希望你喜欢无论如何。
【解决方案2】:

如果您要使用基于字典的编码,而解码器也有字典,则没有绝对最小值。但是,对于基于频率的编码,您需要计算熵:

E = -(P(0) * log_2(P(0)) + P(1) * log_2(P(1)))
E = -(1004/1024 * log_2(1004/1024) + 20/1024 * log_2(20/1024))
E = 0.1388005

因此,输入的每一位平均需要 0.1388005 位的输出。总计:

0.1388005 * 1024 = 142.1317 bits.

这意味着理论上,使用最佳算法,您可以使用 143 位使用 1004 个零和 20 个(或相反)编码任何字符串。

【讨论】:

    【解决方案3】:

    如果您将一个 200 位的字符串视为一个由 20 个 10 位数字组成的数组,每个数字都列出了其中一位的位置,那么您将节省 824 位。

    但我认为这不是最低要求。例如,如果您将每个数字视为相对于前一项而不是绝对位置,则某些分析可能表明,平均而言,您只需要 8 位来编码到下一位的距离。所以在前面加一点:当为 0 时,那么 200 位后跟绝对位置。当为 1 时,160 位后跟相对位置。这应该会产生较低的平均位数来编码完整值。

    概括地说,这只是数据压缩。可能有许多压缩算法可以将“1024 中的 20 位”编码所需的平均位数减少到非常小的数字。计算一棵合适的二叉树,存储它的表示,然后存储遍历树所需的位可能会产生一个非常有效的算法(这实际上是现代数据压缩的基础)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      相关资源
      最近更新 更多