, , n m . , , .
, , O (n ^ 3).
, O (n ^ 2) O (n) .
, , , .
O (n ^ 2) :
if (size(B) > size(A))
swap(A, B);
sort(A);
sort(B);
opt = array(size(B));
nopt = array(size(B));
for (i = 0; i < size(B); i++)
opt[i] = abs(A[0] - B[i]);
for (i = 1; i < size(A); i++) {
fill(nopt, infinity);
for (j = 1; j < size(B); j++) {
nopt[j] = min(nopt[j - 1], opt[j - 1] + abs(A[i] - B[j]));
swap(opt, nopt);
}
return opt[size(B) - 1];
i for , opt[j] , {A[0],..., A[i]}, {B[0],..., B[j]}.
, , a1 b1, a2 b2, a1 < a2, b1 <= b2.