对于二进制向量,找到值为1的最大索引

时间:2014-07-09 09:13:48

标签: binary bit-manipulation time-complexity bitwise-operators binary-search

考虑维度 n 的任意二进制向量。对于 n = 4,示例向量可能是1100。

对于这样的向量,我想知道其位数值为1的最顶层位置。对于上面的1100示例,我想得到答案4(从对)。

上述示例案例的递归O(log( n ))解决方案(或多或少二进制搜索)是

  1. 以1100开头
  2. 将中间分成两个2位向量11和00
  3. 这些中的第一个大于零吗?是的,所以我们现在只关注第一个2位向量(即我们知道我们的位置答案不能是1或2 ......它必须是3或4)
  4. 将11分成两个1位向量1和1
  5. 这些中的第一个大于零吗?是的,它也是1位长。我们知道这是我们的立场,所以我们将其归还。
  6. 我的问题:假设在实际设置中1)n不大于普通计算机上的字大小(即 n <= 64),2)我们&# 39;重新给予&#34;普通&#34;通用指令集,有没有办法在O(1)运算(最差情况)中相对于向量的大小而不是O(log( n ))?我悄悄地希望可能会有一些可以利用的按位指令组合,尽管我的期望并不高:(。

    注意:使用某种将每个可能的向量映射到结果的静态结构是不实际的(例如 n = 64的情况需要太多的内存)。

0 个答案:

没有答案