Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 测量阵列连续性_Arrays_Algorithm - Fatal编程技术网

Arrays 测量阵列连续性

Arrays 测量阵列连续性,arrays,algorithm,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 我想测量(或给分数)每个数组上的连续性,即数组中每个相邻元素的“接近”程度。目前我使用的是每个相邻数组元素的差之和(伪代码): 因此,对于一个完全连续的数组(例如:1,2,3,4,5),分数将为1(最高分数) 但问题出现在连续但包含“跳

我有数据记录,其中每个记录都是严格递增顺序的不同长度的整数数组。以下是一些例子:

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
我想测量(或给分数)每个数组上的连续性,即数组中每个相邻元素的“接近”程度。目前我使用的是每个相邻数组元素的差之和(伪代码):

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

但问题出现在连续但包含“跳转”的数据上,例如上面的
record_2
,存在从
5
30
的“跳转”

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

record_1 : 0.89
record_2 : 0.23
record_3 : 0.4
它给
record_2
的分数低于
record_3
,但是我们可以直观地看到
record_2
应该比
record_3
的分数更高,因为
record_2
除了从
5
跳到
30
之外是连续的


那么,有人知道我应该如何修改我的算法以提供更好的连续性度量吗?谢谢。如果你认为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
是最差分数。如果你不喜欢,很容易
返回1-差异度量的平均值

,假设你的意思是
求和_diff+=A[i]-A[i-1]
,并且你的单调性保证成立,请注意,你给出的算法相当于
分数=(长度(A)-1/(A[length(A)-1]-A[0])
,也就是说,级数中间的值与整个分数完全无关,我不能直观地看到记录2应该有更高的分数。八分之一的顺序中断听起来比五分之一好。@Weeble:很抱歉弄错了,编辑了我的问题,谢谢。如果不更好地了解你打算用这个分数做什么,我认为不可能给出非常有用的答案。不连续的数量比尺寸更重要吗?不连续性是聚集在一起还是应该没有区别?好的,我用这个分数对搜索结果进行排序。我正在使用n-grams实现一个近似的子字符串匹配,这些数组是n-grams在搜索字符串上出现的位置。所以一个连续的位置应该比一个长的非连续的位置好(所以连续性比长度更重要)。我正在考虑@Weeble的答案。谢谢。我考虑间隙尺寸。使用交互来“平滑”较大的间隙应该是一个好主意。
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...