Известен тип задач на переливание жидкостей из одних емкостей в другие с целью получения заданного объема в емкости. Известно 2 основных типа таких задач -Водолей (одна емкость неограничена – можно сливать и выливать любое количество), Переливашка – все емкости ограничены. Рассмотрим 2 тип задач при
емкостях.
Постановка.
Даны 3 емкости
1-я емкость полна , т.е вектор количеств жидкости
Надо :
1 вар) Получить заданное количество
жидкости в одной из емкостей
2вар) Получить заданное распределение количеств во всех емкостях (с точностью до перестановок)
На рис.изображен граф переливаний для
.На нем указаны не все возможные переходы, а только самые короткие переходы. Возможные петли не изображены. Другими словами видимо построено кратчайшее дерево переходов.
Анализ этого примера показывает, что для 1-го варианта постановки есть недостижимое количество
, которое невозможно получить. Кроме того (2 постановка) есть множество недостижимых распределений количеств. Для данного примера это (с точностью до перестановок)
Возникают интересные вопросы об алгоритме построения кратчайших количеств переливаний
для заданного
а также нахождения недостижимых количеств и распределений количеств. А также об оценках функции роста этого алгоритма, и оценках мах количества шагов для заданного количества
Программистский способ решения задачи –видимо в написании рекурсивной программы строящий множество достижимых количеств (вершины) и находящей кратчайшие пути.
Есть ли применения этой задачи в других областях?