查找/计算方法的复杂性
可能重复:
大O,你如何计算/估计它?
Big O的纯英文解释
我刚看到这个问题:在无序数组中寻找最近的数字。 在答案中,人们正在谈论他们提出的方法的复杂性。 他们如何计算它? O(n)或O(logn)是什么意思? 如何查找/计算方法/程序的复杂度?
当你的算法与n个相似的元素一起工作时,复杂性就有意义 并说,时间如何根据n的变化而变化。 所以,如果n上升2倍,时间上升2倍,那么你就有O(n)的复杂性。
如果时间上升为(n ^ 2 + 2000n)函数,我们也说复杂度又是O(n ^ 2)。 该理论只考虑n的更大值,大于算法中的任何其他常数。 所以,这个理论并不总是适合你的需要,要小心。 它不是算法理论的问题,往往不注重重要细节是它的应用问题
你如何猜测? 那么,如果你做了相同的操作n次,其中n是数组元素的数量,你有O(n)。 如果你在前n次进行相同的操作,比n-1次,n-2次降低到1次,你的复杂度为n +(n-1)+ ... + 1。 它是n(n + 1)/ 2,这又是const * n + const2 * n ^ 2。 所以,它是O(n ^ 2)。 当n足够大时,两次n将意味着4次。 逻辑和算术。
简短回答:O(),o()等等是描述函数增长趋势的符号,取决于它的变量。 例如f(x)= x ^ 2 + x - 6 => O(x ^ 2),因为增长是由函数中最高的多项式次数驱动的。 更多关于这个特定主题的信息:大O符号
长答案:这些符号是算法和计算理论研究的基础。 你可能想读一本关于它的好书。 有关算法的最着名的书籍之一
此外,OpenMIT提供免费的整个课程。 这非常有趣!
这是已知的和大O表示法,用于查找给定算法的计算时间复杂度。 你可以在这里找到一个关于如何计算它的简短指南。 虽然它不是Java,但时间复杂性的概念是语言不可知的,所以你应该没问题。 但是请注意,具有相似名称的方法在不同语言中可能具有不同的时间复杂性。
链接地址: http://www.djcxy.com/p/39351.html