考虑长度为 n 的所有位数组的集合。现在考虑从这个集合映射到这个集合的所有 1 对 1 函数的集合。
现在从后一组中选择一个函数。是否有任何算法可以找到实现此功能的“最小”方法?假设我们只能访问基本的位数组运算符,例如 AND OR XOR NOT 和左右位移。
如果您想知道,我想要这个的原因是因为我正在编写一个算法来从位的 z 曲线排序转换为位的希尔伯特曲线排序。我目前的方法是制作一个查找表,但我敢打赌会有更好的选择。
作为一个简单的例子,假设我有一个如下所示的真值表:
00 -> 10
01 -> 01
10 -> 00
11 -> 11
然后我应该能够推断,给定一个输入位串input
,输出位串output
是(在java语法中)
output = ((~input) << 1) ^ input
这是这种情况下的证明:
00 -> 11 -> 10 -> 10
01 -> 10 -> 00 -> 01
10 -> 01 -> 10 -> 00
11 -> 00 -> 00 -> 11