【问题标题】:Fast Range Detection Algorithm快速范围检测算法
【发布时间】:2011-02-17 22:56:41
【问题描述】:

我有一个包含 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,但任何编程语言的解决方案都可以接受。

谢谢。

【问题讨论】:

    标签: arrays algorithm performance


    【解决方案1】:

    确保您的数字 N 确实是 0

    Bin[N/32]++;
    

    编辑:另一张海报提到右移 5 位。这也可以,但是我觉得除以 32 显示意图更清晰,如果它在您的目标平台上更有效,任何现代编译器都会将除法优化为位移。

    【讨论】:

      【解决方案2】:

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

      binIndex = N >> 5;
      

      然后

      Bin[binIndex]++;
      

      这只是忽略数字的低 5 位,使用前三位(如果 N

      【讨论】:

        【解决方案3】:

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

        Bin[N / 32] += 1;
        

        【讨论】:

        • 我知道这个问题看起来很愚蠢......啊!但我好久没睡了!!
        猜你喜欢
        • 2020-08-14
        • 2017-12-27
        • 2010-11-14
        • 2020-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-12
        • 1970-01-01
        相关资源
        最近更新 更多