Попытаемся перевести вашу задачу на язык математики. Обозначим
![$y_i = A[i]$ $y_i = A[i]$](https://dxdy-01.korotkov.co.uk/f/8/4/b/84b7d0d74eeac6d35d815bb92ea9378382.png)
,
![$i \in \{ 1, \ldots, N \}$ $i \in \{ 1, \ldots, N \}$](https://dxdy-03.korotkov.co.uk/f/e/4/d/e4d86e7fe8f6252ac0e1d0d9605493bf82.png)
, - заданные числа,
![$x_i = B[i]$ $x_i = B[i]$](https://dxdy-04.korotkov.co.uk/f/7/0/b/70bfa77d56c784a0de600a0f0b1d22dc82.png)
- то, что нужно найти. Пусть длина кривой -
![$c$ $c$](https://dxdy-04.korotkov.co.uk/f/3/e/1/3e18a4a28fdee1744e5e3f79d13b9ff682.png)
. Тогда вам необходимо найти минимум
![$\sum_{i=1}^N |x_i - y_i|$ $\sum_{i=1}^N |x_i - y_i|$](https://dxdy-04.korotkov.co.uk/f/3/e/5/3e538dd99f3fdd39488e3a80cdebde7a82.png)
при ограничении
![$\sum_{j = 1}^{N-1} |x_{j+1} - x_j| = c$ $\sum_{j = 1}^{N-1} |x_{j+1} - x_j| = c$](https://dxdy-04.korotkov.co.uk/f/b/0/3/b03214147d0bd1bdb7b259b5b620f64d82.png)
, так?
Во-первых, решение этой задачи точно существует (т.е. существует "самая лучшая кривая"), но, по-моему, может быть не единственно.
Я не специалист по численным методам, но могу предложить решать эту задачу с помощью штрафных функций. Если вкратце, то можно выбрать такое число
![$\lambda_0 > 0$ $\lambda_0 > 0$](https://dxdy-02.korotkov.co.uk/f/1/1/b/11bd3f6fdf63d2d35b07e75c09fa061282.png)
, что для любого
![$\lambda > \lambda_0$ $\lambda > \lambda_0$](https://dxdy-02.korotkov.co.uk/f/5/5/1/551eaee11f63e17cf8456183eb3a015282.png)
ваша исходная задача эквивалентна задаче минимизации функции
![$f(x_1, \ldots, x_N) = \sum_{i=1}^N |x_i - y_i| + \lambda \left| \sum_{j = 1}^{N-1} |x_{j+1} - x_j| - c \right|$ $f(x_1, \ldots, x_N) = \sum_{i=1}^N |x_i - y_i| + \lambda \left| \sum_{j = 1}^{N-1} |x_{j+1} - x_j| - c \right|$](https://dxdy-02.korotkov.co.uk/f/5/3/a/53ac6fe366abcbb33f2945106dc47caa82.png)
без ограничений (при желании можно найти оценку для
![$\lambda_0$ $\lambda_0$](https://dxdy-04.korotkov.co.uk/f/3/3/f/33f0eb4ffbe724c1823a06a99986611f82.png)
, а на практике
![$\lambda$ $\lambda$](https://dxdy-04.korotkov.co.uk/f/f/d/8/fd8be73b54f5436a5cd2e73ba9b6bfa982.png)
постепенно увеличивают и находят такое, при котором всё работает). Для минимизации функции
![$f$ $f$](https://dxdy-02.korotkov.co.uk/f/1/9/0/190083ef7a1625fbc75f243cffb9c96d82.png)
можно использовать численные методы недифференцируемой оптимизации (могу указать книгу, где их можно посмотреть). Хотя, это сложный путь, потому что там много чего лишнего надо будет реализовывать. Вероятно, кто-нибудь вам предложит что-нибудь попроще.