可能重复:
Big O, how do you calculate/approximate it?
Plain English explanation of Big O
我刚看到这个问题:Find nearest number in unordered array。在答案中,人们正在谈论他们提出的方法的复杂性。他们如何计算呢? O(n)或O(logn)是什么意思?如何查找/计算方法/程序的复杂性?
答案 0 :(得分:2)
当您的算法使用n个相似元素时,复杂性是有意义的。并说,时间如何根据n的变化而变化。因此,如果n上升2次并且时间增加2倍,则会出现O(n)复杂度。
如果时间增加为(n ^ 2 + 2000n)函数,我们也说复杂性又是O(n ^ 2)。该理论只考虑更大的n值,大于算法中的任何其他常数。所以,理论并不总是符合你的需要,要注意这一点。这不是算法理论的问题,它的应用问题往往不注重重要细节
你怎么猜?好吧,如果你进行n次相同的操作,其中n是数组元素的数量,你有O(n)。如果你正在进行相同的操作n次,而不是n-1次,而不是n-2次,那么你的复杂度为n +(n-1)+ ... + 1。它是n(n + 1)/ 2,也是const * n + const2 * n ^ 2。所以,它是O(n ^ 2)。当n足够大时,两次n将意味着4倍的时间。逻辑和算术。
答案 1 :(得分:1)
简答:O(),o()等......是描述函数将根据其变量增长的趋势的符号。例如f(x)= x ^ 2 + x - 6 => O(x ^ 2)因为增长是由函数中最高的多项式度驱动的。 有关此特定主题的更多信息:Big O notation
长答案:这些符号是算法和计算理论研究的基础。你可能想读一本关于它的好书。 One of the most famous books on Algorithms out there
此外,OpenMIT还提供免费的全部课程。这很有意思!。
答案 2 :(得分:0)
已知且Big O Notation,用于查找给定算法的计算时间复杂度。您可以找到有关如何自行计算here的简短指南。虽然它不是Java,但时间复杂度的概念是语言无关的,所以你应该没问题。但请注意,具有相似名称的方法可能具有不同语言的不同时间复杂度。