我想问一个问题,我试图回答自己,但无法提出任何解决方案。
我想知道任何算法(或者至少可以证明一个算法是否存在),具有这些属性
+-----------+
status_in --> | ALGORITHM | --> status_out
+-----------+
如果问题形成不充分并且可能缺少一些重要细节,请提前抱歉,但这些基本上是我唯一感兴趣的两个属性,而且我无法更准确地重新解释这个问题。
提前感谢您的任何帮助,如果有更多细节我可以提出来让我的问题更清楚,请告诉我。
答案 0 :(得分:1)
var newImg = document.createElement("img");
newImg.src = data_uri;
document.body.appendChild(newImg);
的所有位(如果有status_in
位
k
,然后它可以有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
。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比特值中的一个。所以它无法完成。