【提问】如何高效实现这种运算?(详情在帖子里)
这个 问题之前我放在别的坛子了,但是一直解决不了。。。所以求助专业论坛 - -int类型整数有32位,只有左边低的8位有取值,其余的右边高24位都是0。例如X=00000000 00000000 00000000 hgfedcba。
现在要实现一种 二目 不定输出 的运算“☆”。对于X☆Y,称X为加数,Y 为被加数。
一、先用 一位bit 0,1 来解释“☆”:0☆0=0,1☆0=1;0☆1=1;以上三种情况和 XOR输出结果一致。特别地,是1☆1={0,1},也就是说1☆1输出两个结果 0和1,含义是1☆1可能是0也可能是1。也就是说,当加数和被加数的同一bit位上 都是1 时, 则这一bite位上有两种输出0,1.
二、两bit来举例,00☆01=01,10☆01=11。特别地,10☆11={01,11}(因为最高bit位 都为1,所以最高比特位输出0,1两种形况,而低bite位0☆1=1,只有一种情况,再把高位和低位组合在一起就是{01,11}),含义是10☆11可能等于01也可能等于11。
三bit举例就是 110☆111={001,011,101,111}。
三、好啦 ,现在问题来了。如何快速有效的 计算 X☆Y的输出?当然,X,Y都是 00000000 00000000 00000000 hgfedcba这样的int值。
为了引来“玉”,我说一下我能想到“最好”的很渣的方法 :
首先,开一个2^8 * 2^8 * 2^8 的立方型空间。 把 2^8行 想象成 X 低8位的2^8个值;把2^8行列想象成 Y 低8位的2^8个值;把 2^8竖 想象成 全部 的低8位的2^8个值。
然后(预处理),对于每一个输入(X,Y),一个一个判断2^8个值是不是 X☆Y的输出:是,就在(X,Y)那一竖上标记1;不是,就(X,Y)那一竖上标记0。
最后;当计算X0☆Y0时,就回来查表(X0,Y0)对应的这那些竖上是1,就把对应的值放进输出中。
这个方法的开的空间大,速度慢。。。。行不通。。。。
来吧!大家有什么想法说说看!