Сумма мультимножества

в 7:35, , рубрики: Песочница, метки: ,

Недавно искал алгоритм для расчета всех мультимножеств из заданного множества. Мультимножество удовлетворяет условию — сумма равна заданному числу. На самом деле нужно было перебрать все варианты периода времени от нескольких дней до недели, при условии, что весь период разбит на отрезки времени длиной в несколько часов (например 5,6, и 7).

Эти классы задач довольны известны: en.wikipedia.org/wiki/Subset_sum_problem

Что и привело меня к этому алгоритму: mathoverflow.net/questions/9477

Далее были приключения с «адаптацией» этого алгоритма, после чего идея была заброшена. Простой генератор с использованием product(given_set,repeat=count_items) и условием на сумму оказался самым шустрым вариантом!

После нескольких недель вернулся к данной задаче и понял, что для эффективности первоначального алгоритма нужно использовать графы или деревья. Анализ сложности алгоритмов пока у меня нет.

В итоге вот что получилось на этих выходных: nbviewer.ipython.org/gist/denfromufa/61b3ed4e902fd9d11d6a

Пока не хватает:
* обработки мусора, который скапливается в графе;
* ограничение на количество элементов в найденных мультимножествах.
* оптимизации по времени и памяти.

Но это уже гораздо лучше алгоритма по второй ссылке и моих недавних попыток.

* - обязательные к заполнению поля