考虑长度为n的所有位数组的集合。现在考虑从该集映射到此集的所有1对1函数的集合。
现在从后一组中选择一个功能。是否有任何算法可以找到实现此功能的“最小”方法?假设我们只能访问基本位数组运算符,例如AND OR XOR NOT和左右位移。
如果你想知道,我想要这个的原因是因为我正在编写一个算法,用于将比特的z曲线排序转换为比特的hilbert曲线排序。我目前的方法是制作一个查找表,但我敢打赌,这是一个更好的选择。
举一个简单的例子,假设我有一个如下所示的真值表:
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