为什么此代码具有独特的可解码性?


21

源字母:{a,b,c,d,e,f}

码字母表:{0,1}

  • a:0101
  • b:1001
  • c:10
  • d:000
  • e:11
  • f:100

我认为,要使代码唯一可解码,就必须无前缀。但是在此代码中,例如,代码字c是代码字f的前缀,因此它不是无前缀的。但是我的教科书告诉我,它的反向符号是无前缀的(我不明白),因此它是唯一可解码的。有人可以解释这是什么意思,或为什么它具有独特的可解码性吗?我知道它满足卡夫食品的不平等,但这只是一个必要条件,不是充分条件。


10
无前缀表示可唯一解码,但它不是“ if and only if”语句。例如,请参阅此处
dkaeae

好的,我明白了,但是我的教科书是这样说的:代码A是唯一可解码的,因为它的反向是无前缀的,所以唯一可解码。您知道它们的含义是什么吗?
2000mroliver

1
通过反转所有码字获得的代码可能很简单。
dkaeae

以及为什么这意味着唯一可解码的代码,我不明白
2000mroliver

1
c可能的前缀bf,但被遗留在代码中不存在后缀。当您反转代码时,后缀成为前缀,然后它变得没有前缀。
巴尔马尔

Answers:


26

您的代码具有以下属性:如果您反转所有代码字,则将获得前缀代码。这意味着您的代码是唯一可解码的。

C=x1,,xnCR:=x1R,,xnRC

w=xi1xim if and only if wR=ximRxi1R.
wCwRCR

由于前缀码是唯一可解码的,因此,前缀码的反面也是唯一可解码的。在您的示例中就是这种情况。

C

i=1n2|xi|1.

0,01,110.
111001001010

prefix00010011001110codeword001001
1


2
似乎在OP的示例中,我们无法在固定位数后解码第一个代码字,有无数种情况:1001010101010101…可以是fcccccc…caaa…,我们可能需要等到输入结束才能决定。
贝尔吉

1
1,10,00

4
@Bergi对于任何数量的数字,它总是可解码的。总是只有一种解码编码的方法,没有任何余数。任何其他尝试都将以备用1或0结束。这是因为,如果我们先阅读尾部代码,则该代码是唯一可解码的。从理论上讲,如果事情是在一个方向上唯一可译它没有任何意义,有可能在其他方向上不止一个解决方案
slebetman

@slebetman我指的是一个有限的前缀(可能还有余数)。是的,如果我们接受全部输入,则始终是可解码的。
贝尔吉

5

如果我给您要解码的任何消息,则可以执行以下操作:反转消息,从最后一位开始而不是第一位开始。反转代码字。解码消息。反转解码的字符串。

这样做是因为在反转六个代码字之后,您将获得一个无前缀的代码:1010、1001、01、000、11、001是无前缀的。


0

如果无前缀意味着我的想法,那么'a'的反面以1或10或101开头,这些都不是任何其他完整的有效代码。

因此,如果消息以0101结尾,则只能为“ a”,并且您可以对前面的位应用类似的逻辑。

但是,如果没有尽头呢?好吧,如果第一位是1,您就知道它不是'a'或'd'。第二位将消除'e'或{'b','c','f'}。第三位可能使它变成一个选择,但如果没有,则第四位是唯一的。

到达唯一序列后,请在下一位重新启动算法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.