У меня есть реальная проблема (не домашнее задание!), Которая требует нахождения суммы подмножества набора A, которая равна сумме подмножества некоторого другого набора B.
Очень похожий вопрос с полезным ответом здесь.
Рассмотрим этот пример:
@a = qw(200 2000 2000 2000 4000);
@b = qw(528 565 800 1435 2000 2000 2872);
Используя код в принятом ответе на этот вопрос, я получаю следующий результат:
sum(200 2000 4000) = sum(528 800 2000 2872)
sum(200 4000 4000) = sum(528 800 2000 2000 2872)
sum(200 4000) = sum(528 800 2872)
sum(200 2000 2000 2000 4000) = sum(528 800 2000 2000 2000 2872)
Для моих целей мне нужны только ответы, в которых используется наименьшее количество элементов входных наборов. В этом примере я просто хочу
sum(200 4000) = sum(528 800 2872)
потому что во всех остальных ответах также есть 200
и 4000
в сумме. То есть я ищу только «самые простые» возможные суммы (в том смысле, что они используют наименьшее количество элементов). Может ли кто-нибудь предложить достаточно эффективный способ сделать это? (Грубая сила - это нормально, поскольку мои массивы не такие большие.)
Также я должен отметить, что вторая строка вывода, sum(200 4000 4000) ...
, неверна, потому что 4000
появляется только один раз в @a
. Боюсь, я недостаточно хорошо понимаю алгоритм, чтобы понять, почему это происходит.
Любая помощь с любым из них будет очень признательна!
sum(2000) = sum(2000)
неправильный ответ? Почемуsum(4000)=sum(2000 2000)
неправильный ответ? - person mob   schedule 22.06.2011