我正在寻找一个有效的算法来解决这个问题:
输入:某个整数的正整数(存储为位)。
输出:数字。
问题:我们可以根据时间中的位计算吗?
这是一个理论问题,是由我对数学的回答引起的。SE问题如何找到该双射的公式?。在这个问题中,作者想从和自然数找到一个双射。我提出了作为解决方案。那里的另一个答案是“没有简单的公式”,这使我想知道我提出的解决方案有多简单(计算上)。
使用我提出的解决方案,如果我们知道和,我们可以轻松地计算(写出的二进制数字,后跟后跟零)。这需要时间。
从的位中找到等于找到最低有效位(可以通过计算右移来计算,将留在内存中)。这需要时间。2 m 3 n 3 n O (m )
但是,我们还需要找到,这可能会更困难。通过重复除以可以找到,但这似乎很浪费。它需要除法运算,每个除法运算都需要时间,因此总共是时间。[实际上,在每次迭代之后,位数将线性减少,但这仍然会导致时间。]n 3 n O (n )O (n 2)O (n 2)
知道输入为的幂,似乎我们应该可以利用。