【问题标题】:What is the time complexity for this algorithm?这个算法的时间复杂度是多少?
【发布时间】:2015-06-12 07:48:33
【问题描述】:
public static void Comp(int n)
{
    int count=0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            for(int k=1;k<n;k*=2)
            {
                count++;
            }
        }
    }
    System.out.println(count);
}

有谁知道时间复杂度是多少?

Big Oh() 是什么

请你一步一步给我解释一下吗?

【问题讨论】:

  • 我认为是 N^2 * logN。

标签: java algorithm time complexity-theory


【解决方案1】:

给你这个问题的人几乎肯定是在寻找答案n^2 log(n),原因其他人已经解释过了。

但是这个问题并没有任何意义。如果n &gt; 2^30k会溢出,使内循环无限。

即使我们将此问题视为完全理论上的问题,并假设 nkcount 不是 Java ints,而是某种理论上的整数类型,答案 n^2 log n 假设操作++*= 具有恒定的时间复杂度,无论需要多少位来表示整数。这个假设实际上是不成立的。

更新

在下面的 cmets 中向我指出,根据硬件的工作方式,假设 ++*=2&lt; 都有恒定的时间复杂度,无论需要多少位。这使我的答案的第三段无效。

【讨论】:

  • 这通常是假设,并非不正确。乘以 2 只是硬件中的移位操作,++ 只是一个计数器,它是一个恒定的时钟周期。查看teahlab.com,尤其是柜台文章/电路。所以这个问题并不像你想象的那么理论化。在硬件中,假设是正确的。
  • 接受这个作为答案表明了 OP 是多么的迷茫和困惑。这个问题并不像这个家伙假设的那么理论,他只是提到其他答案是正确的。那么这怎么算正确答案呢?有点思考,朋友。一点思考。
  • @KonsolLabapen 对于移位操作(即乘以 2),并行访问移位寄存器可以工作吗? teahlab.com/4-Bit_Parallel_Access_Shift_Register我去网站搜索了shift这个词,结果就是这样。
  • 你需要一个比 4 位大得多的,但是是的。它应该适用于移位和任何用于计数的大型计数器。
  • 这当然是一个有趣的讨论。如果您查看门的工作方式(门是指集成电路):门彼此不知道。移位寄存器中没有级联传播。每个门都查看其输入。当时钟周期到来时,每个门都会根据其输入信号进行计算。所以你可以有十亿个门。如果它们并行排列,它们将在时钟上同时计算。所以是的O(1) 实际上是正确的。这些移位寄存器可以在您当地的五金店购买,所以没什么特别的。
【解决方案2】:

时间复杂度为O(n^2 log n)。为什么?每个 for 循环都是 n 的函数。每个for循环都必须乘以n;除了增长为 log n 的内循环。为什么?每次迭代 k 乘以 2。想想归并排序或二叉搜索树。

详情

对于前两个循环:1 从 0 到 n 的总和,即 n+1,因此前两个循环给出(n+1)*(n+1)= n^2+2n+1= O(n^2)

对于 k 循环,我们有 k 增长为 1,2,4,8,16,32,... 所以 2^k = n。取双方的日志,得到k=log n

再次,不清楚?

所以如果我们设置m=0a=2 那么我们得到-2^n/-1 为什么a=2?因为这是系列产生 2,4,8,16,...2^k

的值

【讨论】:

  • 不正确,最内层的for循环取log(n),使得最终产品O(n^2 log(n))
  • 他可能想要一个能给出的最紧的约束,而这个不是。
  • @G.Bach 我几乎不相信最内层的循环是 O(N)。
【解决方案3】:

理论上这是O(n^2 * log(n))

两个外部循环中的每一个都是O(n),内部循环是O(log(n)),因为nlog base 2 是您必须将n 除以2 得到@987654328 的次数@。

这也是一个严格的界限,即代码也是Θ(n^2 * log(n))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2016-10-30
    相关资源
    最近更新 更多