以下算法的时间复杂度是什么?
输入:点集P及其欧几里得坐标
-
计算这些点的旅行路线(使用最近邻算法,类似于旅行商问题)
-
对于每个点,获取其最近邻信息(相对于原始数据集中所有点)
复杂度是O(n)还是O(n²)?我们如何轻松地可视化复杂度和效率?
回答:
-
-
对于每个点,你必须找到最近的邻居。(你得到第一个
n
) -
计算两个点之间的距离会得到一个
1
的因子,因为它在O(1)
内运行。 -
因此,计算一个点与所有其他点之间的距离会得到一个
O(n)
的因子。
总共你得到
O(n²)
。当然,在第3步中,你不需要计算到已访问点的距离,但这只节省了一个常数因子。 -
-
一个点
A
的最近邻信息是离A
最近的点。所以你必须为n
个点计算到所有其他点的距离,因此这里也得到O(n²)
将这些加在一起,结果是O(n² + n²) = O(2n²) = O(n²)
。