我一直在围绕一台机器的概念性想法(如在图灵机中)和我想知道是否已就这个或相关主题做过任何工作。
这个想法是一台机器,它采用熵流并在任何范围内发出随机符号而不会丢失任何熵。
我很高兴这远非严格的描述,所以我举一个例子:假设我有1
到n
范围内的随机符号生成器,我想成为能够在任何给定范围内询问符号,首先是1
到12
,然后是1
到1234
。 (为了保持可行性,我只考虑确定性机器,在给定相同输入流和请求的情况下,它总是给出相同的输出。)一个必要的约束是输出包含至少与输入一样多的熵。然而,我最感兴趣的约束是机器只读取吐出的熵。
E.g。如果要求1
到S1, S2, S3, ... Sm
范围内的令牌,则只会消耗ceiling(sum(i = 1 to m, log(Si))/log(n))
个输入令牌。
This question询问如何在满足第一个约束的同时进行此转换,但在第二个约束上做得非常糟糕。
答案 0 :(得分:1)
好吧,我仍然不确定我是否按照你的意愿行事。听起来你想要一个功能
f :我→O
其中输入是字母 I = {1 .. n }上符号的强随机(均匀分布等)序列。 (所以一系列随机自然数≤ n 。)输出是O = {1 .. m }上的另一个序列,你希望该序列具有尽可能多的熵作为投入。
好的,如果我有这个权利,首先,如果 m< n ,你不能。如果 m< n 然后lg m < lg n ,因此输出符号集的熵较小。
如果 m ≥ n ,那么只需选择 i th 元素即可轻松完成。 {1 .. 米}。熵将是相同的,因为可能的输出符号的数量是相同的。然而,它们在整个集合{1 .. m }中均匀分布的意义上并不是“随机的”,因为必然(鸽子原则)某些符号不会被选中一点都不。
另一方面,如果您对{1 .. m }上的随机序列感到满意,那么您可以通过使用输入选择合适的伪随机数生成器来实现从随机来源作为种子。
答案 1 :(得分:1)
我目前的传球:
通过添加以下限制:您事先知道范围的顺序是{S1,S2,S3,...,Sn},而使用带有非常数基数的基本平移可能有效:
Sp = S1 * S2 * S3 * ... * Sn
m=cealing(log(Sp)/log(n))
{R1, R2, R3, ..., Rm}
个字词
X = R1 + R2*n + R3*n^2 + ... + Rm*n^(m-1)
X
改为O1 + S1*O2 + S1*S2*O3 + ... Sn*On + x
1 <= Oi <= Si
这可以重新编码为一个解决方案,通过将x推回到输入流中,一次可以处理一个值。但是,我不能说服我自己,即使已知的输出范围形式也是如此......