Data structures 嵌套while循环问题的时间复杂性

Data structures 嵌套while循环问题的时间复杂性,data-structures,Data Structures,大家好,我目前在理解此数据结构问题时遇到问题: function Prob(n): x = 0 i = 5 while i <= n ^ 2 * sqrt(n) do: j = n * logbase5(n) // In my solution for first iteration K i set everything equal to c while j >= 3 do: // So far my solution

大家好,我目前在理解此数据结构问题时遇到问题:

function Prob(n):
  x = 0
  i = 5
  while i <= n ^ 2 * sqrt(n) do:
    j = n * logbase5(n)             // In my solution for first iteration K i set everything equal to c
    while j >= 3 do:       // So far my solution is T(n) is in theta (n^2.5) but i don't think it's right.
                        // Iteration 1 K=nlog(n), Iteration 2 B=log(n).
      x = x + i - j
      j = j - 5
    end while
    i = 3 * i
  end while
  return x
end function
功能问题(n):
x=0
i=5
当i=3 do://到目前为止,我的解是T(n)在θ(n^2.5)中,但我认为这是不对的。
//迭代1k=nlog(n),迭代2b=log(n)。
x=x+i-j
j=j-5
结束时
i=3*i
结束时
返回x
端函数

让我们在这里观察两件事:

  • j
    只受
    n
    的影响,因此它的值在循环的每次运行中都是相同的:
    n*logbase5(n)
    但是将它除以5(因为我们每次运行都得到
    -5
    ,所以它
    theta(n*log(n))
    (注意
    logbase5(n)
    只是让您感到困惑,因为它是:
    log(n)/log(5)
    这是一个常数,
    -5
    也不会改变该函数的渐近行为)
  • i
    在外循环中被
    i=i*3
    改变,但在内循环中没有改变。上界是
    (n^2)*sqrt(n)
    ,正如您所注意到的,它是
    n^2.5
    ,但是,每一次迭代我们通过
    i=3*i
    增加三倍。因此,这个循环正在发生
    logbase3(n^2.5)
    (因为迭代的
    i=3^或多或少)。同样,
    logbase3(n)=log(n)/log(3)
    log(n^m)=m*log(n)
    ,所以我们再次得到:
    theta(log(n))
  • 总之,我们得到了θ(log(n)*log(n))或θ(log^2(n))


    备注-我正在使用CS日志(在基数2中的意思),这是常用的符号,正如你所看到的,它只在常数因子上不同于任何其他非变量基。

    这是什么语言?@PaulH是一种伪代码,这与问题无关。谢谢!j受n的影响真的把我甩了真的很快跟进,你把内环θ乘以外环了吗θ得到θ^2?@Lifeofnaye我希望这就是你所问的,我将内循环所做的功乘以外循环正在执行的次数(因为它除了内循环之外不做任何耗时的事情)。因此,我得到了
    log(n)*log(n)
    是的,这是正确的,只是澄清一下,我们不使用几何级数来解决这个问题,因为j只受n的影响?@Lifeofnaye实际上,我不把它看作几何序列。内部循环是由输入
    n
    预先确定的,因此,循环的数量与
    I
    根本没有关系。
    I
    确实以“几何”方式增加,但我们需要知道的是循环条件何时被违反。在序列术语中,哪个元素是第一个违反循环条件的。您可以自己测试它,并看到这发生在
    θ(log(n))
    位置的元素中。