一维点的成对距离

时间:2019-10-01 07:17:43

标签: algorithm euclidean-distance pairwise-distance

是否可以比O(n ^ 2)更快地计算一组点在一个维度上的成对距离(所有点都在一条直线上)?

2 个答案:

答案 0 :(得分:0)

以小于O(N²)个操作计算O(N²)距离显然是不可能的。

如果仅需要一些距离,则可以在O(1)中计算一个距离;不要预先计算所有这些。

如果您的问题实际上是关于最接近的点对,则一维版本是立即生成的:排序并找到最接近的连续点。最远的点对甚至更简单:找到时间O(N)的最小值和最大值。也许您还在追问另一个问题...

答案 1 :(得分:0)

如果线的给定点在数组中,我们可以在 O(N)中创建一个算法来计算逐对距离。排序的复杂度为 Nlog(N),因此总体复杂度为 Nlog(N)

将数组中排序后的点的前缀总和与变量和的总和存储起来。

##### Example 2: wt as a dummy variable (error on data with incomplete values) #####
# Train:
data_train <- mtcars %>% 
  mutate(wt = factor(
    case_when(
      wt < 2 ~ "1_2",
      wt < 3 ~ "2_3",
      wt < 4 ~ "3_4",
      wt < 5 ~ "4_5",
      TRUE ~ "5_6"
    ))
  )
data_train <- dummy.data.frame(data_train, "wt", sep = "_")
model_matrix_train <- model.matrix(am ~ ., data = data_train)
xgb_data_train <- xgb.DMatrix(model_matrix_train, label = data_train$am)
param <- list(max_depth = 2, eta = 1, objective = "binary:logistic")
model_xgb <- xgb.train(param, xgb_data_train, nrounds = 100)

# Test on data with incomplete wt values:
data_test <- mtcars %>% 
  filter(wt < 4) %>% 
  mutate(wt = factor(
    case_when(
      wt < 2 ~ "1_2",
      wt < 3 ~ "2_3",
      wt < 4 ~ "3_4",
      wt < 5 ~ "4_5",
      TRUE ~ "5_6"
    ))
  )
data_test <- dummy.data.frame(data_test, "wt", sep = "_")
model_matrix_test <- model.matrix(am ~ ., data = data_test)
xgb_data_test <- xgb.DMatrix(model_matrix_test, label = data_test$am)
predict(model_xgb, newdata = xgb_data_test, type="prob") # ERROR