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