Есть задачка, к линуксу напрямую отношения не имеет, но наверняка может быть быть решена на компьютере.
Есть 2 списка по 100 ячеек. В ячейке может быть объект, а может не быть ничего. Есть функция f(S1(i), S2(i)), где S1(i), S2(i) - соответственно объект из 1го и 2го списка с одинаковым индексом.
Если одна из двух ячеек пуста, f()=0, если S1(i) == S2(i), f()=0. Во всех остальных случях - некоторое неотрицательное значение
Нужно найти такую последовательность перестановок элементов в списках, чтобы за наименьшее количество шагов уменьшить сумму f(S1(i), S2(i)) i:=1..100 на наибольшее возможное значение.
Или другими словами переставить элементы так, чтобы в соответствующих ячейках двух списков были либо одинаковые элементы, либо в одном элемент, в другом ничего. Чем меньше индексов по которым располагаются разные элементы или чем более они похожи, тем лучше.
Пустых ячеек примерно 10% от длины списков. Из одного списка в другой переносить нельзя.
Может встречались какие-нибудь похожие задачи? С какой стороны или каким методом можно подойти?