最近的一对蛮力;为什么O(n ^ 2)?

时间:2017-01-17 19:39:27

标签: algorithm performance closest-points

我对提出这个问题感到愚蠢,但是......

对于“最接近的点对”问题(如果不熟悉它,请参见this),为什么蛮力算法O(n ^ 2)的最坏情况运行时间?

如果说n = 4,那么在搜索空间中只有12个可能的点要比较,如果我们也考虑从两个方向比较两个点。如果我们两次不比较两点,那么它将是6。

O(n ^ 2)并不等于我。

4 个答案:

答案 0 :(得分:4)

实际比较次数为:

exact formulaenter image description here

但是,在大O符号中,你只关心主导词。在非常大的enter image description here值时,enter image description here项变得不那么重要了,enter image description here项上的<code>n^2</code>系数也变得不那么重要了。所以,我们只说<code>O(n^2)</code>

Big-O表示法并不意味着为您提供所用时间或步骤数的确切公式。它只给出了复杂度/时间的顺序,因此您可以了解它如何针对大输入进行缩放。

答案 1 :(得分:2)

施加蛮力,我们被迫检查所有可能的对。假设N个点,对于每个点,我们需要计算距离的N-1个其他点。因此计算的总可能距离= N点* N-1个其他点。但在过程中我们将距离加倍。 A到B之间的距离保持是否计算A到B或B到A.因此N *(N-1)/ 2。因此O(N ^ 2)。

答案 2 :(得分:1)

在big-O表示法中,您可以分解乘法常数,因此:

O(k*(n^2)) = O(n^2)

这个想法是常数(OP示例中的1/2,因为距离比较是反射的)并没有真正告诉我们有关复杂性的任何新内容。它随着输入的平方而变得更大。

答案 3 :(得分:1)

在算法的蛮力版本中,您可以比较所有可能的点对。对于n个点中的每个点,您有(n - 1)个其他要点进行比较,如果我们最后进行(n * (n - 1)) / 2次比较,我们会对每一对进行比较。 O(n^2)的悲观复杂性意味着对于某个常量k * n^2,操作数受k约束。 Big O表示法不能告诉您确切的操作次数,而是在数据大小(n)增加时与其成比例的函数。