我正在寻找一个有效的算法来解决这个问题: 输入:某个整数的正整数(存储为位)。3n3n3^nn≥0n≥0n \geq 0 输出:数字。nnn 问题:我们可以根据时间中的位计算吗?nnn3n3n3^nO(n)O(n)O(n) 这是一个理论问题,是由我对数学的回答引起的。SE问题如何找到该双射的公式?。在这个问题中,作者想从和自然数找到一个双射。我提出了作为解决方案。那里的另一个答案是“没有简单的公式”,这使我想知道我提出的解决方案有多简单(计算上)。{2n3m:n≥0 and m≥0}{2n3m:n≥0 and m≥0}\{2^n 3^m: n \geq 0 \text{ and } m \geq 0\}N={1,2,…}N={1,2,…}\mathbb{N}=\{1,2,\ldots\}2m3n↦2m(2n+1)2m3n↦2m(2n+1)2^m 3^n \mapsto 2^m(2n+1) 使用我提出的解决方案,如果我们知道和,我们可以轻松地计算(写出的二进制数字,后跟后跟零)。这需要时间。nnnmmm2m(2n+1)2m(2n+1)2^m(2n+1)nnn111mmmO(n+m)O(n+m)O(n+m) 从的位中找到等于找到最低有效位(可以通过计算右移来计算,将留在内存中)。这需要时间。2 m 3 n 3 n O (m )mmm2m3n2m3n2^m 3^n3n3n3^nO(m)O(m)O(m) 但是,我们还需要找到,这可能会更困难。通过重复除以可以找到,但这似乎很浪费。它需要除法运算,每个除法运算都需要时间,因此总共是时间。[实际上,在每次迭代之后,位数将线性减少,但这仍然会导致时间。]n 3 n O (n )O (n 2)O (n 2)nnnnnn333nnnO(n)O(n)O(n)O(n2)O(n2)O(n^2)O(n2)O(n2)O(n^2) 知道输入为的幂,似乎我们应该可以利用。333
这是我之前的问题的跟进工作: NP中自然问题的最著名的确定性时间复杂度下限 我感到困惑的是,我们无法为人们关心的任何有趣的NP问题证明任何二次确定性时间下界,并试图为其设计更好的算法。我们的指数时间假设猜想指出,SAT无法在亚指数确定性时间内求解,但我们甚至无法证明SAT(或任何其他有趣的NP问题)需要二次时间! 我知道有趣是有点主观和模糊的。我没有定义。但是,让我尝试描述我认为是一个有趣的问题:我所谈论的问题是很多人不感兴趣的问题。我不是在谈论主要是为了回答一些理论问题的孤立问题。如果人们没有试图为问题找到更快的算法,那么这表明问题不是那么有趣。如果需要有关有趣问题的具体示例,请考虑Karp 1972年的论文或Garey and Johnson 1979年的问题(大部分)。 对于为什么我们无法证明任何有趣的NP问题没有任何二次确定性时间下界有什么解释吗?