【问题标题】:What is the complexity of dist()?dist() 的复杂度是多少?
【发布时间】:2017-11-17 21:30:26
【问题描述】:

我在 R 中使用了 dist 函数,我想知道它的时间复杂度。

我知道层次聚类的时间复杂度为N^2*logN。层次聚类由两部分组成,如下R中的代码。

> d <- dist(as.matrix(mtcars))   # find distance matrix 
> hc <- hclust(d)                # apply hirarchical clustering 
> plot(hc)                       # plot the dendrogram

在应用层次聚类之前,需要计算距离矩阵。我认为这需要N^2 复杂性?

【问题讨论】:

  • hclust 函数应该有 O(n³) 运行时间。

标签: r cluster-analysis euclidean-distance distance-matrix


【解决方案1】:

准确地说,如果矩阵XNP 列,则dist(X) 的复杂度为3N(N-1)P/2。这是由N(N - 1)/2 * 3P 计算的。

解释:

  • 结果距离矩阵中有N(N - 1)/2 条目;
  • 每个条目是两个长度 P 向量(加上一个平方根)之间的点积,每个向量都涉及 P 减法、P 乘法和 P 加法。

【讨论】:

  • 如果N==P,那么你的意思是需要N^3
  • 据我了解,大 O 是指当 N 变得非常大而其他参数保持不变时。所以我认为这实际上是 O(N^2)。
  • 为什么像 CAH 或 Gower 这样的集群算法有 O(N^3) 但它们有 N 和 P 参数?