Сейчас я ищу работу и выполняю много упражнений с алгоритмами. Вот моя проблема:
Учитывая два массива: a и b с одинаковой длиной, субъект состоит в том, чтобы сделать | sum (a) -sum (b) | минимальным путем замены элементов между a и b .
Вот моя мысль:
предположим, что мы поменяем местами a [i] и b [j], установим Delt = sum (a) - sum (b), x = a [i] -b [j]
, тогда Delt2 = sum (a) -a [i] + b [j] - (sum (b) -b [j] + a [i]) = Delt - 2 * x,
тогда изменение = | Delt | - | Delt2 |, который пропорционален | Delt | ^ 2 - | Delt2 | ^ 2 = 4 * x * (Delt-x),
На основании вышеизложенного я получил следующий код:
Delt = sum(a) - sum(b);
done = false;
while(!done)
{
done = true;
for i = [0, n)
{
for j = [0,n)
{
x = a[i]-b[j];
change = x*(Delt-x);
if(change >0)
{
swap(a[i], b[j]);
Delt = Delt - 2*x;
done = false;
}
}
}
}
Однако, есть ли у кого-нибудь лучшее решение? Если попал, скажите, пожалуйста, и я буду вам очень признателен!