我需要编写一个以 4 个字节作为输入的函数,对此执行可逆线性变换,并将其作为 4 个字节返回。
但是等等,还有更多:它还必须是可分配的,因此在输入上更改一个字节应该会影响所有 4 个输出字节。
问题:
- 如果我使用乘法,它在通过存储作为字节修改 255 后将不可逆(并且它需要保持为字节)
- 如果我使用加法,它就不能可逆和分配
一种解决方案:我可以创建一个长度为 256^4 的字节数组并以一对一的映射方式填充它,这会起作用,但是存在问题:这意味着我必须搜索大小为 256^8 的图形,因为必须为每个值搜索免费数字(应注意分配性应该是基于 64*64 字节数组的 sudo 随机数)。该解决方案还存在需要 8GB RAM 的次要 (lol) 问题,这使得该解决方案毫无意义。
输入的域与输出的域相同,每个输入都有一个唯一的输出,换句话说:一对一映射。正如我在“一个解决方案”中指出的那样,这是很有可能的,当有一个较小的域(只有 256 个)存在问题时,我使用了该方法。事实是,随着数字变大,该方法变得异常低效,delta 缺陷O(n^5)
和 omegaO(n^8)
在内存使用方面也有类似的缺陷。
我想知道是否有一个聪明的方法来做到这一点。简而言之,它是域的一对一映射(4 字节或 256^4)。哦,像 N+1 这样简单的东西不能使用,它必须是一个 64*64 字节值数组,这些字节值是 sudo 随机的,但可以重新创建以进行反向转换。