Algorithm 这个for循环的时间复杂度是多少? (i=0;i
就我所知,复杂性无法确定。Algorithm 这个for循环的时间复杂度是多少? (i=0;i,algorithm,big-o,time-complexity,Algorithm,Big O,Time Complexity,就我所知,复杂性无法确定。 迭代永远不会进行,因此循环基本上是无限循环。正如注释中所说的,循环只在n时终止≤ 0。每隔n,程序不会终止 我认为如果你有一些永远不会终止的东西,你就不想谈论复杂性,因为复杂性是用来了解大输入的运行时间和比较算法的 您甚至不能说您拥有的代码是一个算法,因为算法的定义通常包含必须终止的代码 如果你被要求在big-o中写下一些东西,有不止一种方法来看待这个问题 该算法永远不会终止,因此它会进行无限次运算,您无法找到常数c和函数f(n)(多项式或指数)与∞ < C⋅f(n)
迭代永远不会进行,因此循环基本上是无限循环。正如注释中所说的,循环只在
n时终止≤ 0
。每隔n
,程序不会终止
我认为如果你有一些永远不会终止的东西,你就不想谈论复杂性,因为复杂性是用来了解大输入的运行时间和比较算法的
您甚至不能说您拥有的代码是一个算法,因为算法的定义通常包含必须终止的代码
如果你被要求在big-o中写下一些东西,有不止一种方法来看待这个问题
c
和函数f(n)
(多项式或指数)与∞ < C⋅f(n)
用于n<∞代码>,所以它应该是O(∞)代码>
这得到了big-o的正式定义的支持
n→ 2n
您可以看到,执行的操作的数量没有改变,因此也可能是O(1)
。这是由递归公式
T(n)=T(n-1)
支持的。最后,您必须定义T(1)
是什么。复杂性与小的或特定的输入无关,因此可以定义T(1)=O(1)
但正如我在开始时所说的:您不想谈论永不终止的代码的复杂性(或者只针对不相关的情况).这取决于
n
的值,它永远不会继续,这不是真的。如果n0,它是常数时间。或者,如果i
在循环体中被修改,那么它就完全是常数时间!25*0=0,所以你的$i
从0开始,并且总是0。因此,这个循环的复杂性是O(无穷大)。
for(i=0; i < n; i * = 25)