Algorithm 在计算时间复杂度的中间丢弃不太重要的术语?

Algorithm 在计算时间复杂度的中间丢弃不太重要的术语?,algorithm,time,time-complexity,Algorithm,Time,Time Complexity,我们知道,对于一些时间复杂度为Tn=n^2+n+1的算法,我们可以去掉不太重要的项,并说它的最坏情况是On^2 当我们在计算一个算法的时间复杂度时,例如Tn=2Tn/2 +N+Logn?我们可以去掉不太重要的项,在logn上说Tn=2Tn/2+n=吗?首先,你需要理解Tn=n^2+n+1是一个封闭形式的表达式,简单地说,它意味着你可以为n注入一些值,你将得到整个表达式的值 另一方面,Tn=2Tn/2+n+logn是a,这意味着这个表达式是递归定义的,要得到一个封闭形式的表达式,您必须求解递归关系

我们知道,对于一些时间复杂度为Tn=n^2+n+1的算法,我们可以去掉不太重要的项,并说它的最坏情况是On^2


当我们在计算一个算法的时间复杂度时,例如Tn=2Tn/2 +N+Logn?我们可以去掉不太重要的项,在logn上说Tn=2Tn/2+n=吗?

首先,你需要理解Tn=n^2+n+1是一个封闭形式的表达式,简单地说,它意味着你可以为n注入一些值,你将得到整个表达式的值

另一方面,Tn=2Tn/2+n+logn是a,这意味着这个表达式是递归定义的,要得到一个封闭形式的表达式,您必须求解递归关系

现在来回答你的问题,一般来说,当我们可以清楚地看到最高阶项时,我们会去掉低阶项和系数,在Tn=n^2+n+1,它的n^2中。但在递归关系中,不存在这样的最高阶项,因为它不是一个封闭形式的表达式


但需要注意的是,递归关系的闭式表达式中的最高阶项是递归树的深度乘以递归关系中的最高阶项的结果,所以在你们的例子中,它是depthOf2Tn/2*n,这会导致类似logn*n的结果,因此,你可以说,在大O表示法中,它是唯一的。首先,你需要理解,Tn=n^2+n+1是一个封闭形式的表达式,简单地说,它意味着你可以为n注入一些值,你将得到整个表达式的值

另一方面,Tn=2Tn/2+n+logn是a,这意味着这个表达式是递归定义的,要得到一个封闭形式的表达式,您必须求解递归关系

现在来回答你的问题,一般来说,当我们可以清楚地看到最高阶项时,我们会去掉低阶项和系数,在Tn=n^2+n+1,它的n^2中。但在递归关系中,不存在这样的最高阶项,因为它不是一个封闭形式的表达式


但需要注意的是,递归关系的闭式表达式中的最高阶项是递归树的深度乘以递归关系中的最高阶项的结果,所以在你们的例子中,它是depthOf2Tn/2*n,这会导致类似logn*n的结果,所以你可以说,在大O表示法中,它是Onlogn。

在这种情况下,是的,你可以安全地放弃被支配的logn项。一般来说,你可以在任何时候这样做,你只需要渐近行为,而不是精确的公式

当您应用

Tn=a Tn/b+fn

渐近的,那么你不需要fn的精确公式,只需要渐近行为,因为这就是主定理的工作原理

在你的例子中,a=2,b=2,所以临界指数是c=1。然后,主定理告诉我们Tn在Θn logn中,因为fn=n+logn,在Θnc=Θn中


我们可以用fn=n得出相同的结论,因为这也在Θn中。应用该定理只需要知道fn的渐近行为,因此在这种情况下,可以安全地丢弃不影响fn渐近行为的支配项。

在这种情况下,可以安全地丢弃支配对数n项。一般来说,你可以在任何时候这样做,你只需要渐近行为,而不是精确的公式

当您应用

Tn=a Tn/b+fn

渐近的,那么你不需要fn的精确公式,只需要渐近行为,因为这就是主定理的工作原理

在你的例子中,a=2,b=2,所以临界指数是c=1。然后,主定理告诉我们Tn在Θn logn中,因为fn=n+logn,在Θnc=Θn中


我们可以用fn=n得出相同的结论,因为这也在Θn中。应用该定理只需要知道fn的渐近行为,因此在这种情况下,可以安全地丢弃不影响fn渐近行为的支配项。

我明白了。在这种情况下,我可以随便猜测一下,Tn=2Tn/2+n+logn等于Tn=2Tn/2+n和Tn=2Tn/2+logn之和吗?所以在这种情况下,它将是Tn=n logn+n,然后我们可以去掉不太重要的项,并说这是在logn上?不要基于猜测。最好的方法是求解递归,得到一个闭式表达式,然后你可以清楚地看到最高阶项,但是如果你求解了足够多的递归关系,那么你就对什么是闭式表达式有了一个大致的理解。我明白了。在这种情况下,我可以随便猜测一下,Tn=2Tn/2+n+logn等于Tn=2Tn/2+n和Tn=2Tn/2+logn之和吗?所以在这种情况下,它将是Tn=n logn+n
n我们可以去掉不太重要的术语,说这是logn?不要基于猜测。最好的方法是求解递归并得到一个闭式表达式,这样你就可以清楚地看到最高阶项,但是如果你求解了足够多的递归关系,那么你就可以对什么是闭式表达式有一个大致的了解。