【问题标题】:How to efficiently determine the binary length of an integer? [duplicate]如何有效地确定整数的二进制长度? [复制]
【发布时间】:2022-01-23 23:46:17
【问题描述】:

我正在寻找一种使用 Python 确定二进制表示中整数长度的快速方法。在 C++ 中,可以考虑uint64_t(log2(x) + 1.0)

让我们以以下算法为例,该算法计算余数为 17 的数模 24:

def count17mod24(s:int, max_bin_len:int)->int:    
    x=0
    q = queue.Queue()
    q.put(s)
    while not q.empty():
        n = q.get()
        if n%3 == 2:
            q.put((2*n-1)//3)
            if n % 24 == 17:
                x += 1
            if len(np.binary_repr(n)) < len(np.binary_repr(s))+max_bin_len-1:
                q.put(4*n+1)
        elif n%3 == 0:
            if len(np.binary_repr(n)) < len(np.binary_repr(s))+max_bin_len-1:
                q.put(4*n+1)
        elif n%3 == 1:
            if len(np.binary_repr(n)) < len(np.binary_repr(s))+max_bin_len and n>1:
                q.put((4*n-1)//3)
            if len(np.binary_repr(n)) < len(np.binary_repr(s))+max_bin_len-1:
                q.put(4*n+1)
    return x

那些对潜在数学问题感兴趣的人可能想看看这个MSE post。我想一步一步地进一步优化算法,我相信位的计数绝对是一个可能的行动点。目前我正在使用np.binary_repr(n),然后通过len(...)测量它的长度。

可能还有许多其他对性能至关重要的用例可用于确定整数的二进制长度。如果有任何想法可以加快速度,我将不胜感激。也许有一些使用 log2 或类似技巧的方法?

【问题讨论】:

  • 底层原理大家都有while(n): n&gt;&gt;=1 ig。
  • 是的 - 非常感谢。这使我的问题过时了。我试图删除我的问题,但收到了警告,这让我不愿意删除它。

标签: python performance binary


【解决方案1】:

内置的 Python int 类型有一个方法 bit_length,这可能是最快的方法。

a = 3
print(a.bit_length())

Output: 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 2015-06-08
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多