使用随机1位增益/丢失进行编码

时间:2016-09-16 07:32:43

标签: algorithm encoding compression

我想问一个问题,我试图回答自己,但无法提出任何解决方案。

我想知道任何算法(或者至少可以证明一个算法是否存在),具有这些属性

              +-----------+
status_in --> | ALGORITHM | --> status_out
              +-----------+
  1. “status_out”比原始“status_in”大1位或小1位,随机50%的几率
  2. 来自“status_out”我总是可以回到“status_in”
  3. 如果问题形成不充分并且可能缺少一些重要细节,请提前抱歉,但这些基本上是我唯一感兴趣的两个属性,而且我无法更准确地重新解释这个问题。

    提前感谢您的任何帮助,如果有更多细节我可以提出来让我的问题更清楚,请告诉我。

3 个答案:

答案 0 :(得分:1)

  1. 如果使用var newImg = document.createElement("img"); newImg.src = data_uri; document.body.appendChild(newImg); 的所有位(如果有status_ink,然后它可以有status_in个不同的值,每个值都不同 彼此):
    在这种情况下,很容易证明没有这样的算法。值得注意的是,2^k具有status_out位,因此k-1可能的最大值为status_out。自2^(k-1)起,这意味着有一些2^k > 2^(k-1)x,y),status_in。但是,鉴于f(x) = f(y),您无法分辨原始版本:f(x)x
  2. 如果y的可能值不包括所有可能性,则为是。例如,32位有符号整数(在大多数语言中为status_in),由于某些其他限制,必须是可能的。您可以删除符号位(始终为0),并获得31位数字。由于您始终知道源是可能的,因此很容易添加int

答案 1 :(得分:0)

从左到右,你会在一半的时间内删除一些信息,所以从Landauer's principle开始,从左到右的过程会导致系统环境中的熵增加。

要使过程可逆,从'status_out'恢复'status_in',你需要有一种从环境中提取熵的方法,即永久运动机器。

答案 2 :(得分:0)

我会忽略在你的问题中使用“随机”这个词,并假设你在询问确定性算法。因此,当你说50%时,我会认为正好一半可能的输入缩短一点,而正好一半则长一位。我还假设您通过某种方式知道输入和输出消息的位长度,以便代码可以共享公共前缀。即输出的位串不必是自终止的。此外,我将假设您不需要编码零位长度输入。至少有一点输入。但是,允许零位输出。

答案是,是的,如果status_in是一个固定的位数。如果status_in可以是任意数量的位,则答案为否。

因此,如果status_in k 位,则可以使用所有可能的 k在 k-1 位中对其中一半进行编码-1 位字符串。另一半可以用可用的 k + 1 位串的四分之一进行编码。这是可逆的。

但是,如果status_in可以是任意数量的位,则会在 k k + 2 位的映射之间发生冲突。要编码 k 位,我们使用 k + 1 位值的四分之一。但是,为了编码 k + 2 位,我们使用 k + 1 位值的 all 。因此没有足够的 k + 1 位值。这在编码1位和3位时首次出现。其中一个1位值编码为零位,另一个编码为2位。然而,当编码3比特时,3比特值中的4个编码为可能的2比特值的全部,但是我们已经使用1作为1比特值中的一个。所以它无法完成。