2011-02-17 65 views
0

我有一个8个元素的数组:Bin[8]。 Bin代表范围容器:我收到一个号码N,如0 <= N <= 255快速范围检测算法

  1. 如果N < 32 ==>Bin[0] += 1
  2. 否则如果32 <= N < 64 ==>Bin[1] += 1
  3. ...等

我想这并不需要If-Else指令快速解决方案,我有多个箱子可以处理。

我正在使用Java,但接受任何编程语言的解决方案。

谢谢。

回答

2

确保您的数量N为0确实< = N < = 255,则只需:

Bin[N/32]++; 

编辑:另一个海报提到由5个比特右移。这也可以,但是我觉得除了32个显示意图更清晰之外,任何现代编译器都会将分割优化为位移,如果它在您所针对的平台上更高效。

1

只需使用整数除法(截断):

Bin[N/32] += 1; 
+0

我知道这个问题看起来很笨...唉!但我还没有睡一会儿! – FearUs 2011-02-17 23:07:27

2

我们可以使用一些位运营商这样的:

binIndex = N >> 5; 

然后

Bin[binIndex]++; 

这恰恰忽略了低5位的数字,使用前三位(如果N < = 255)作为二进制数组索引。