我觉得问这个问题很愚蠢,但是...
对于“最接近的点对”问题(不熟悉的请看这个),为什么蛮力算法的最坏情况运行时间是 O(n^2)?
如果说 n = 4,那么如果我们还考虑从任一方向比较两个点,那么在搜索空间中将只有 12 个可能的点对进行比较。如果我们不比较两个点两次,那么它将是 6。
O(n^2) 不适合我。
我觉得问这个问题很愚蠢,但是...
对于“最接近的点对”问题(不熟悉的请看这个),为什么蛮力算法的最坏情况运行时间是 O(n^2)?
如果说 n = 4,那么如果我们还考虑从任一方向比较两个点,那么在搜索空间中将只有 12 个可能的点对进行比较。如果我们不比较两个点两次,那么它将是 6。
O(n^2) 不适合我。
施加蛮力,我们被迫检查所有可能的对。假设有 N 个点,对于每个点,还有 N-1 个其他点需要我们计算距离。所以计算的总可能距离 = N 点 * N-1 个其他点。但在这个过程中,我们重复计算了距离。无论是计算 A 到 B 还是 B 到 A,A 到 B 之间的距离都保持不变。因此 N*(N-1)/2。因此 O(N^2)。
在 big-O 表示法中,您可以分解乘积的常数,因此:
O(k*(n^2)) = O(n^2)
这个想法是常数(在 OP 示例中为 1/2,因为距离比较是反射性的)并没有真正告诉我们关于复杂性的任何新信息。它仍然随着输入的平方而变大。
在算法的蛮力版本中,您比较所有可能的点对。对于每个n
点,您还有(n - 1)
其他点要比较,如果我们在进行比较后拿走每一对点(n * (n - 1)) / 2
。的悲观复杂性O(n^2)
意味着操作的数量受限k * n^2
于某个常数k
。大 O 表示法不能告诉您操作的确切数量,而是一个函数,当数据 ( n
) 的大小增加时,它与它成正比。