测量阵列连续性

时间:2012-02-16 13:44:04

标签: arrays algorithm

我有数据记录,其中每条记录是严格增加的顺序的各种长度的整数数组。以下是一些例子:

record_1 : 1,2,3,4,5,6,8,9,10
record_2 : 5,30,31,32,33,34,35,36
record_3 : 10,11,12,19,20

我想测量(或给出)每个阵列的连续性,即如何“关闭”阵列的每个相邻元素。目前我正在使用每个相邻数组元素的差异和(伪代码):

for i=2 to length(A) do
    sum_diff += A[i] - A[i-1]
end
score = (length(A) - 1) / sum_diff

因此,对于完美连续的数组(例如:1,2,3,4,5),分数将为1(最高分)。

但问题是连续但包含“跳转”的数据,例如上面的record_2,从530有一个“跳转”。

对于上述数据示例,使用我的算法的分数是:

record_1 : 0.89
record_2 : 0.23
record_3 : 0.4

它得分低于record_2 record_3,但我们可以直观地看到record_2得分应高于record_3,因为{除了从record_2跳转到5之外,{1}}是连续的。

那么,有没有人知道如何修改我的算法以提供更好的连续性测量?谢谢。

1 个答案:

答案 0 :(得分:1)

如果您认为2的差距与10的差距一样差,那么平均“不同于1”的函数:

differenceMeasures[i] = A[i+1] - A[i] == 1 ? 1 : 0
return average of differenceMeasures
// Note that the average will be sum(differenceMeasures)/(n-1) since there's
// one less difference than there is number of array entries in 'A'.

如果你想考虑间隙尺寸,我建议使用一个单调递减的函数,如零往事一样:

differenceMeasures[i] = 1 / A[i+1] - A[i]
return average of differenceMeasures
// When the difference is 1, differenceMeasures gets 1.
// When 2, differenceMeasures gets 1/2. Etc...

在这两个函数1中,0的最佳分数是最不理想的。如果您不喜欢这样,return 1 - average of differenceMeasures就足够了。