如何找出算法的最佳时间复杂度?

时间:2016-11-01 20:28:57

标签: algorithm time-complexity

通过某种算法解决问题后,您何时尝试提高其时间复杂度?也就是说,什么时候才能知道您当前的时间复杂度是最好的,并且渐近时间复杂度无法进一步改善。 我希望在面试过程中将其清除,如果面试官要求我进一步优化无法优化的算法,我如何在数学上证明我开发的算法已经是最好的算法而且没有进一步的#34 ;主要"优化可以做到吗?

1 个答案:

答案 0 :(得分:2)

您正在询问如何证明算法时间复杂度的下限。这有时相当容易,例如,如果您尝试生成指数数量的事物,您不能比指数时间做得更好,或者如果您需要在未排序的列表中找到最大数量,那么检查所有数字,以便最佳时间界限是线性的。然而,这有时是非常困难的。计算机科学中最重要的开放性问题之一是P = NP猜想,如果有人可以证明任何NP完全问题的下限,就可以解决这个问题。在这种方法上投入了大量的时间和精力,但它没有取得任何重大成果。此外,尽可能低的大O并不一定意味着没有更好的常数因子的算法更快。

在实践中,常数因素很重要,因此他们可能只是问你是否可以改进实施中的常数因素。此外,试图在采访中证明事情充其量只是打击或错过。如果您被要求进一步优化算法,通常是因为有更快的方法来解决问题,并且访谈员通常会提出问题并提供提示以尝试提示您采用这种解决方案。

关于某些证明技术,在比较排序上绑定的nlog(n)的证明是一个有趣的证明。证据的基本思想是有n!列表的可能排列以及在最坏的情况下,每次比较只能消除其中的一半。通过Sterling的近似,这变成了nlog(n)界限。话虽如此,这是一个复杂的话题,太广泛,无法直接在这里讨论。