为了方便或简单的外观,使用更高的Big-O表示法值是否常见?
例如:我正在研究这种算法" bifragment gap carving"简要解释here(第66页)。如果我理解正确,算法将采用任何间隙大小n
,最大值为sum from 1 to n
,但在同一文档中它表示:
该技术不适用于存在大间隙碎片的文件。如果n是bh和bz之间的簇数,那么在最坏的情况下,可能需要n ^ 2个对象验证 在成功恢复之前。
所以我的问题是:我是否理解算法错误或最差情况运行时向上舍入到n^2
看起来比总和更好?
答案 0 :(得分:2)
'总和从1到n'实际上等于(n + 1)* n / 2,或(n ^ 2/2 + n / 2)
因此,在这种情况下,数量级为n^2
。没有简化(当n很大时,你可以明显地删除乘法常数,如1/2和n << n^2
。
答案 1 :(得分:1)
回答实际问题:是的,它不仅是常见的,而且非常普遍。 O(N * N)表示对于某些未指定的c,度量(通常是运行时间)上升的速度不会快于c * N * N.当N上升时,N * N + N显然小于2 * N * N,因此O(N * N + N)只是O(N * N)。
答案 2 :(得分:1)
O(f)中给出的函数f是算法复杂度的上限。这意味着对于所有大小为n的输入(大于特定大小n0),您的算法不会使用比const * f(n)更多的时间(或空间)。
如果你的算法总和(i,i = 0 ... n)步(等于n *(n-1)/ 2并且是二次函数),则表示const * n * n是有效的所有n的上限> n0 - >复杂度为O(n ^ 2)
另一个解释看这里: big o notation in plain english