可以使用从0
到2^n-1
范围内的部分(可以使用全部)数字来创建任意的数字序列。让我们考虑所有数字都是唯一的序列。
例如,如果为n = 4
,则某些序列为:
4 2 5 7 11 3
15 1 6
6 5 8 2 3 10 12 13 4
问:有没有可能在不使用内存来存储整个序列的情况下生成这样的序列?
我在考虑某种类型的函数F
,它只进行位操作,并使用前一个数给出下一个数。例如在序列7 3 5 9
中:F(7)=3
,F(3)=5
,F(5)=9
。
如果我事先知道序列,如何构建这样的函数F
?
发布于 2019-05-20 01:08:23
是的。加密是明文和密文之间的双向映射。每个明文输入都会产生一个唯一的密文输出,然后可以将其唯一地解密回原始明文。
对于数字,使用诸如DES (64位)或AES (128位)之类的块密码是最容易的。如果需要,也可以使用其他块大小。
对于给定的序列,您将需要存储密码密钥,通常与块大小一样大,以及您在明文输入中到达的位置。简单地加密整数0,1,2,3,...按顺序。输出将是给定块大小内的一系列不重复的数字。要生成相同序列中的更多数字,请从最后使用的数字开始。对于不同的序列,更改密钥并从0重新开始。每个键定义给定大小的可能块的排列。
对于允许重复的序列,使用散列函数而不是密码,散列0,1,2,3,...对于不同的序列,使用XOR块作为键的等价物,并在散列之前将其与输入进行XOR运算。如果要添加到现有序列中,则需要跟踪已到达的输入位置。
https://stackoverflow.com/questions/56208581
复制相似问题