我对提出这个问题感到愚蠢,但是......
对于“最接近的点对”问题(如果不熟悉它,请参见this),为什么蛮力算法O(n ^ 2)的最坏情况运行时间?
如果说n = 4,那么在搜索空间中只有12个可能的点要比较,如果我们也考虑从两个方向比较两个点。如果我们两次不比较两点,那么它将是6。
O(n ^ 2)并不等于我。
答案 0 :(得分:4)
实际比较次数为:
但是,在大O符号中,你只关心主导词。在非常大的值时,项变得不那么重要了,项上的系数也变得不那么重要了。所以,我们只说。
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
)增加时与其成比例的函数。