以下功能的运行时复杂性

问题描述

我需要这些功能的帮助,如果运行时复杂性正确,我正在学习当前课堂上的概念,并且看过视频等,但是找不到任何解释这些的视频更难的,所以我希望我做得对,可以在这里得到一些帮助。

sum = 0
for i = 1 to n*n
    for j = 1 to i * i * i
        sum++

对于这个问题,我想答案是O(n ^ 5),因为外循环运行n ^ 2次,而内循环运行n ^ 3次,加起来就是n ^ 5 >

sum = 0
for i = 1 to n^2 // O(n^2) times
   j = i
   while j > 0 //(O(n+1) since the while loop will check one more time if the loop is valid
      sum++
      j = (j div 5)

对于这个运行时间,我假设它要运行O(n ^ 3 + 1)次,因为外循环运行了n ^ 2次,而while循环将是n + 1,而这就是n ^ 3 + 1。

for i = 1 to n // n times
   for j = 1 to n { // n^2 times
     C[i,j] = 0
     for k = 1 to n // n^3 times?
        C[i,j] = C[i,j] + A[i,k]*B[k,j]

}

所以对于这个我想是O(n ^ 6),但是我对此真的很怀疑。我在网上看到了一些示例,人们会认为该循环为O(n log n),但我完全不知道该如何找到。任何帮助将不胜感激!

解决方法

您对第一种和第三种算法的理解似乎是正确的。但是,第二个完全关闭。内循环

   while j > 0 //(O(n+1) since the while loop will check one more time if the loop is valid
      sum++
      j = (j div 5)

j等于i开始,并在每次迭代中将j除以5,因此它运行log(i)次。反过来,i1n^2不等,总执行时间为

    sum[i: 1..n^2] log(i)

通过对数的性质,该总和等于log ((n^2)!)。将阶乘近似为斯特林近似,得到的时间复杂度为O(n^2 log(n^2)) = O(2 n^2 log(n)) = O(n^2 log(n))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...