R实现按逆转排序

时间:2012-10-14 14:46:07

标签: algorithm r sorting metric

我想知道在R中是否有一个实现,它将n个数字的排列分类到原始的1 ... n序列中,并提供所需的反转次数。例如,按照ppt中概述的“按逆转排序”或“按易位排序”的实施。

具体来说,我有一个n个元素序列的排列,pi(n),我想弄清楚它与原始序列有多接近。逆转的数量似乎是一个很好的指标。

谢谢!

1 个答案:

答案 0 :(得分:2)

这似乎是肯德尔距离的工作(有时也称为泡泡排序距离)。它可能是衡量排名空间距离的最常用指标。

Kendall距离计算两个序列中两个序列的项目排序不同的次数。在其中一个序列是平凡序列(1,2,...,n)的情况下,我们可以简单地通过计算i <1的次数来测量距离。 j和pi(i)&gt; PI(J)。

如果您喜欢这个指标(它相当于您必须完成将一个序列转换为1:n的相邻项目的成对转置的最小数量),您可以在我的包中找到它,RMallow,可在CRAN上找到。该函数称为AllSeqDists。这是一个例子:

library(RMallow)
# Create a matrix of sequences, each of length 5
datas <- matrix(c(1:5, 5:1, c(2, 1, 3, 4, 5), c(5, 1, 2, 3, 4), c(1, 2, 4, 5, 6), c(1, 5, 6, 2, 4)), nrow = 6, byrow = TRUE)
# Calculate all of their Kendall distances to the sequence (1, 2, 3, 4, 5)
datas <- SimplifySequences(datas)
dists <- AllSeqDists(datas)

你也可以考虑斯皮尔曼的指标 此外,还有一类关于排名数据的模型,我必须插入一个名为“Mallows模型”的模型,具体取决于你想做什么。