Во-первых, вам нужно определить каждую критически перегруженную область вашего списка, самую большую подпоследовательность (i, j), такую, чтобы
(x[j] - x[i]) / 2.0 < j-i
РЕДАКТИРОВАТЬ Комментарий Нико размещен на: I не учитывал эффективно открытый интервал на одном конце. Я думаю , что корректировка идентификации зазора поможет ...
(x[j] - x[i]) / 2.0 < j-i-1
EDIT END
В приведенном вами примере есть только одно такое местоположение, значения от -0,1 до 3,5, разница 3,6, где требуется спред 6,0. Минимальный спред будет состоять из чисел p + 2.0 * k
для k в закрытом интервале [0, (ji)]
Теперь у вас есть выражение для вашей ошибки:
sum for k = 0, (j-i)
(x[k] - (p + 2k))^2
Все Значения x[k]
известны, и все значения 2k
известны. Разверните выражение, решите для p
и сведите к минимуму - возьмите производную и установите ее равной 0. Полученное значение p
дает вам новое значение x[i]
, а остальные следуют из этого.