在不加载其他库的情况下,如何在R中计算两个排列之间的Kendall tau距离(又称气泡排序距离)?
这是一个O(n.log(n))实现,在阅读后一并刮过,但是我怀疑可能会有更好的R解决方案。
inversionNumber <- function(x){
mergeSort <- function(x){
if(length(x) == 1){
inv <- 0
#printind(' base case')
} else {
n <- length(x)
n1 <- ceiling(n/2)
n2 <- n-n1
y1 <- mergeSort(x[1:n1])
y2 <- mergeSort(x[n1+1:n2])
inv <- y1$inversions + y2$inversions
x1 <- y1$sortedVector
x2 <- y2$sortedVector
i1 <- 1
i2 <- 1
while(i1+i2 <= n1+n2+1){
if(i2 > n2 || (i1 <= n1 && x1[i1] <= x2[i2])){ # ***
x[i1+i2-1] <- x1[i1]
i1 <- i1 + 1
} else {
inv <- inv + n1 + 1 - i1
x[i1+i2-1] <- x2[i2]
i2 <- i2 + 1
}
}
}
return (list(inversions=inv,sortedVector=x))
}
r <- mergeSort(x)
return (r$inversions)
}
。
kendallTauDistance <- function(x,y){
return(inversionNumber(order(x)[rank(y)]))
}
如果需要定制抢七,则必须在标记的行上摆弄最后的条件 # ***
用法:
> kendallTauDistance(c(1,2,4,3),c(2,3,1,4))
[1] 3
问题内容: 我有以下模型: 我应如何查询以距离排序(距离为无穷大)? 如果需要,可以在PosgreSQL,GeoDjango上工作。 问题答案: 首先,最好使一个点字段而不是使lat和lnt分开: 然后,你可以像这样过滤它:
所以我有jQuery数据表设置和运行良好。我的最终目标是允许用户使用谷歌位置自动完成,更新他们的位置,然后在刷新时将一个“可排序”的距离列添加到我的数据表表中。 计划是在google autocomplete的文本输入旁边有一个按钮,上面写着使用这个地址,一旦用户使用autocomplete搜索并找到一个地址,然后按下按钮,我想(可能)将它们发送到加载页面几秒钟,同时 1) 阅读文本字符串,将其格
我正在搜索半径3公里内的用户,基于用户的长/拉特。我正在比较auth long/lat和附近的用户long/lat。它返回具有距离的用户集合。 现在我很难按距离排序。 如果我添加orderBy('距离','desc')当然会导致一个错误,因为我的DB上没有距离列。 这是一种排序和分页的方法。
问题内容: 我有这样的代码: 这样,我得到的元素之间没有距离。我的意思是,“顶部”元素总是触及“底部”元素。我该如何更改?我想在元素之间进行一些分离吗? 我考虑在元素之间添加一些“中间” JPanel(具有一定大小)。但是我认为这不是获得理想效果的一种优雅方法。有人可以帮我吗? 问题答案: 将是这样做的一种方式。
本文向大家介绍顶点之间的距离和偏心距,包括了顶点之间的距离和偏心距的使用技巧和注意事项,需要的朋友参考一下 两个顶点之间的距离 它是顶点U和顶点V之间最短路径中的边数。如果有多个路径连接两个顶点,则最短路径被视为两个顶点之间的距离。 表示法-d(U,V) 从一个顶点到另一顶点可以有任意数量的路径。其中,您只需要选择最短的一个即可。 示例 看一下下图- 在这里,从顶点“ d”到顶点“ e”或简称“
问题内容: 无法弄清楚如何对用户附近的 地址 进行自动 排序 。我不明白从哪里开始以及如何编写代码。 我的 firebase中 有地址。地址的类型为字符串(不是纬度/经度)。例: 我知道需要从firebase 使用 查询 ,但是如何使用 query ,我现在不明白。 这是我的代码: 如何使用 Firebase中的* 数据在用户附近自动 排序 地址? * 问题答案: 这是一个复杂的过程,需要多个步骤
问题内容: 我有一个字段,显示为从今天起的天数。因此和将分别显示为正数和负数。现在,我希望对它们进行排序,以便非负数首先以升序排列,然后负数以降序排列。例如: 问题答案: 以下内容也可以工作: 但是,此表单不会使用索引来按所需顺序生成行。如果您的查询将从中受益(从表中选择大多数行或使用限制),则需要使用并集:
嗨,我用冒泡排序查看了其他帖子,但解决方案在我的例子中不起作用:所以算法在我循环时重复了几次之后才起作用。但我如何在不使用输入的情况下做到这一点?这是我的代码,你知道我的意思: