快速范围检测算法

时间:2011-02-17 22:56:42

标签: arrays algorithm performance

我有一个包含8个元素的数组:Bin[8]。 Bin表示范围容器:我收到一个N号,例如0 <= N <= 255

  1. 如果N < 32 ==&gt; Bin[0] += 1
  2. 如果32 <= N < 64 ==&gt; Bin[1] += 1
  3. ......等。
  4. 我想要一个不需要If-Else指令的快速解决方案,因为我有多个Bins需要处理。

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

    谢谢。

3 个答案:

答案 0 :(得分:2)

确保您的数字N确实为0 <= N <= 255,然后简单地:

Bin[N/32]++;

编辑:另一张海报提到右移5位。这也会有效,但我觉得除以32显示意图更清洁,任何现代编译器都会优化分区,如果它在您正在瞄准的平台上更有效率的话。

答案 1 :(得分:2)

我们可以使用一些按位运算符:

binIndex = N >> 5;

然后

Bin[binIndex]++;

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

答案 2 :(得分:1)

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

Bin[N / 32] += 1;