Имеет ли решение задача?

Есть две последовательности чисел:

a1, a2, a3… an

b1, b2,b3… bn



Среднее арифметическое этих двух последовательностей равны.

Вычисляется разность между последовательностями следующим образом:

R = |a1-b1| + |a2-b2| + |a3-b3| +… + |an-bn|



Задача в том, возможно ли найти такой коэффициент k, домножив на который первую последовательность,

чтобы разница между последовательностями была минимальной.

т.е.

R = |k*a1-b1| + |k*a2-b2| + |k*a3-b3| +… + |k*an-bn|

т.е. нужно найти такой k, при котором R минимальна.



Другими словами, нужно подобрать такой масштабный коэффициент для первой последовательности, чтобы разница между последовательностями была минимальной.

Конечно, эта задача достаточно легко решается «двоичным поиском» (до определенной точности), но для этого нужно совершить некоторое количество вычислений R с разными k.

А можно ли как-то найти этот k не методом перебора?



UPD. Все числа >= 0
  • Вопрос задан
  • 3195 просмотров
Решения вопроса 1
@AndreyDaeron
1. R = a1*|k-b1/a1| + a2*|k-b2/a2| + a3|k3-b3/a3| +… + an|k-bn/an| (если ai=0 — то за скобки не выносим и нам это пофиг.
2. Очевидно, что такая функция кусочно-линейна относительна к на каждом из участков, к, для которых модули открываются с одинаковым знаком (предположим что а1/b1>b2/a2>...bn/an, если это не так — отсортируем что бы было так). Имеется ввиду что на участке [(ai/bi,(ai+1)/(bi+1)] функция будет линейна (!!! Это, в общем случае неверно для для (-inf,+inf).
3. Поскольку она линейна, то её минимум будет достигнут в одной из точек ai/bi.
4. ????? (перебираем все точки ai/bi)
5. Profit

И никакого бинарного поиска ))
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
zona7o
@zona7o
Веб-разработчик
Возможно ошибаюсь, но если последовательности не имеют никакой функциональной зависимости — то нет, единственное решение — перебор.
Ответ написан
TheHorse
@TheHorse
Для двоичного поиска нужно, чтобы R(k) была линейной, а вашем случае, если я не ошибаюсь, может быть что попало.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы