我有一个8个元素的数组:Bin[8]
。 Bin代表范围容器:我收到一个号码N
,如0 <= N <= 255
。快速范围检测算法
- 如果
N < 32
==>Bin[0] += 1
- 否则如果
32 <= N < 64
==>Bin[1] += 1
- ...等
我想这并不需要If-Else
指令快速解决方案,我有多个箱子可以处理。
我正在使用Java,但接受任何编程语言的解决方案。
谢谢。
我有一个8个元素的数组:Bin[8]
。 Bin代表范围容器:我收到一个号码N
,如0 <= N <= 255
。快速范围检测算法
N < 32
==>Bin[0] += 1
32 <= N < 64
==>Bin[1] += 1
我想这并不需要If-Else
指令快速解决方案,我有多个箱子可以处理。
我正在使用Java,但接受任何编程语言的解决方案。
谢谢。
确保您的数量N为0确实< = N < = 255,则只需:
Bin[N/32]++;
编辑:另一个海报提到由5个比特右移。这也可以,但是我觉得除了32个显示意图更清晰之外,任何现代编译器都会将分割优化为位移,如果它在您所针对的平台上更高效。
只需使用整数除法(截断):
Bin[N/32] += 1;
我们可以使用一些位运营商这样的:
binIndex = N >> 5;
然后
Bin[binIndex]++;
这恰恰忽略了低5位的数字,使用前三位(如果N < = 255)作为二进制数组索引。
我知道这个问题看起来很笨...唉!但我还没有睡一会儿! – FearUs 2011-02-17 23:07:27