У меня есть записи данных, где каждая запись представляет собой массив целых чисел различной длины в строго возрастающий заказ. Вот некоторые примеры:Измерение смежности массива
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
выше, есть «прыжок» от 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
.
Итак, есть ли у кого-нибудь идея о том, как мне изменить свой алгоритм, чтобы дать лучшее измерение смежности? Спасибо, прежде.
Предполагая, что вы имеете в виду 'sum_diff + = A [i] - A [i-1]' и что ваша гарантия монотонности сохраняется, обратите внимание, что данный алгоритм эквивалентен 'score = (length (A) - 1)/(A [length (A) -1] - A [0]) ', т. Е. Что значения в середине серии полностью не соответствуют общей оценке. – Weeble
Я не могу интуитивно видеть, что * record_2 * должен иметь более высокий балл. Один разрыв последовательности в 8 звучит лучше, чем один из 5. –
@Weeble: извините за ошибку, отредактировал мой вопрос, спасибо. –