0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 7

Комбинаторные алгоритмы. Backtracking. Пробирки

08.04.2014, 23:15. Показов 4028. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется три пробирки по 100 мл, первые две пробирки с рисками (метками). Риски совпадают. Изначально, первая пробирка имеет 100 мл, другие пусты. Требуется написать программу, которая выясняет, можно ли отделить в третьей пробирке один миллилитр. Количество и сами риски задаются пользователем.

Как сказано в заголовке, здесь надо использовать комбинаторные алгоритмы. Думаю, можно как-то через backtracking решить.
Я не рассчитываю на код. Объясните пожалуйста, хотя бы на псевдокоде или хотя бы на пальцах алгоритм решения задачи.

У самого есть несколько вариантов, но не знаю, как связать это, и возможно ли сделать как-то рекурсивно.
Первое, что можно рассмотреть: граф, изображающий возможные состояния набора из трех пробирок и возможные переходы между ними. Но тут другой вопрос встает: как его правильно построить?

Второй вариант: льем во вторую пробирку до первой риски (или выливаем из первой до риски, не важно, думаю), сверяем, будет ли разница в один мл. Если нет, выливаем из второй в третью. Потом льем опять из первой во вторую. И так до конца повторяем, пока либо не найдем ответ, либо не закончится жидкость. А вот что потом...
Что-то мне это напомнило ханойские башни...

Может, у кого есть/были наработки или кто сможет подсказать алгоритм, помогите разобраться!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.04.2014, 23:15
Ответы с готовыми решениями:

Комбинаторные алгоритмы
Не знаю считается ли такая задача разделом комбинаторкик, но вроде слово комбинация больше всго подходит. В общем есть N переменных,...

Комбинаторные алгоритмы
Здравствуйте! У меня задание сделать конспект по комбинаторным алгоритмам. Подскажите, пожалуйста, учебник или какую-нибудь литературу,...

Комбинаторные алгоритмы
Подскажите пожалуйста книги по дисциплине комбинаторные алгоритмы. Желательно, где рассказывается с самых основ. Заранее спасибо!

25
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 7
09.04.2014, 22:15  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Metall_Version Посмотреть сообщение
можно делить емкость пополам . и отнимать и добавлять известное количество жидкости. тут реально комбинаторика . нужно просто такими способами дойти до любого объема этой последовательности (2.4.8.16.32.64)
Как делить пополам? На глаз? Пользователь, к примеру, задал значения рисок: 3 20 41 70 в первой пробирке и 5 15 61 80 во второй. Как пополам-то делить?
Цитата Сообщение от Евгений В Посмотреть сообщение
Мне только не понятно, как тут привязать уровень к расчетам. Тогда нужно вводить высоту.
Т.е. не очень понятна эта часть:
Цитата Сообщение от ctreloknik
риски задаются пользователем
Что непонятно? Пользователь сам задал, какие метки есть. Хотя бы одна, но должна быть. Собственно, выше написано, как может быть размечено.

Добавлено через 2 минуты
Цитата Сообщение от Евгений В Посмотреть сообщение
ctreloknik,
Посмотрите здесь http://atpp.vstu.edu.ru/cgi-bi... id_prb=204
Спасибо, перед созданием темы, я прошерстил инет и видел этот материал. В том то и беда, что не знаю, как правильно сделать этот граф.
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
09.04.2014, 22:18
я думаю число можно еще больше уменьшить. но оно все равно не будет ровно 1

Добавлено через 2 минуты
Цитата Сообщение от ctreloknik Посмотреть сообщение
Как делить пополам? На глаз? Пользователь, к примеру, задал значения рисок: 3 20 41 70 в первой пробирке и 5 15 61 80 во второй. Как пополам-то делить?
а как решать задачу не зная условия ? .. вы точнее скажите на каких отметках есть риски ... Или же риски мы сами ставим . А то - решите мне то не знаю что
а делить можно и без рисок я постами выше это очень подробно описал .
0
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 7
09.04.2014, 22:21  [ТС]
Цитата Сообщение от Metall_Version Посмотреть сообщение
я думаю число можно еще больше уменьшить. но оно все равно не будет ровно 1
Вот, почти такое же условие: http://atpp.vstu.edu.ru/cgi-bi... id_prb=204
Разве что я могу задать (как оказалось уже сегодня), разные метки на двух пробирках. Да не суть важно это.
Вот представьте, что вам заказчик дал такое ТЗ (в моем случае, это препод). Вы же не будете к нему приходить с пробирками и на глазах у него это переливать?

Добавлено через 1 минуту
Цитата Сообщение от Metall_Version Посмотреть сообщение
Или же риски мы сами ставим . А то - решите мне то не знаю что
а делить можно и без рисок я постами выше это очень подробно описал .
Сказал же, пользователь сам задает отметки (они же риски). Перечитайте еще раз вот это: "Пользователь, к примеру, задал значения рисок: 3 20 41 70 в первой пробирке и 5 15 61 80 во второй." (В милилитрах, конечно же)
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
09.04.2014, 22:25
Цитата Сообщение от ctreloknik Посмотреть сообщение
Вот представьте, что вам заказчик дал такое ТЗ (в моем случае, это препод).
зачем браться за задания в которых не компетентен. в данном случае это математика.

я без понятия честно говоря как решить такую задачу .когда входные данные не известны даже.

Добавлено через 1 минуту
Цитата Сообщение от ctreloknik Посмотреть сообщение
Сказал же, пользователь сам задает отметки (они же риски). Перечитайте еще раз вот это: "Пользователь, к примеру, задал значения рисок: 3 20 41 70 в первой пробирке и 5 15 61 80 во второй." (В милилитрах, конечно же)
я думал пользователь это я или тот кто решает задачу. то есть я могу на свое усмотрение задавать риски . теперь понятно все удачи вам в этой задачке
0
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 7
09.04.2014, 22:30  [ТС]
Цитата Сообщение от Metall_Version Посмотреть сообщение
зачем браться за задания в которых не компетентен. в данном случае это математика.
я без понятия честно говоря как решить такую задачу .когда входные данные не известны даже.
если бы я сам брал задачу - одно дело, другое, когда тебе ее самому дают, ибо это лаба. никакая это не математика.
какие еще данные на вход? не знаю, в какой раз говорю, но пользователь сам вводит, какие метки есть у пробирок. все! дальше тыкает кнопочку и программа считает, есть ли там решение.
пример данных входа:
Риски 1 пробирки: 3 20 41 70
Риски 2 пробирки: 5 15 61 80
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
10.04.2014, 11:31
Цитата Сообщение от ctreloknik Посмотреть сообщение
Риски 1 пробирки: 3 20 41 70
Риски 2 пробирки: 5 15 61 80
1) допустим, у нас есть бесконечный резервуар и у нас есть риска на 100 мл.
рассмотрим действия которые мы можем сделать.
- набрать первую до риски и отлить до меньшей риски во второй
входные данные - 3, 20, 41, 70, отнимаем 5, 15, 61, 80(если можем)
отливаем от полной : 95, 85, 39, (20 исключаем, есть такая отметка)
от 70 : 65, 55, 9
от 41: 36, 29
от 20: 15, 5 - исключаем так как есть такие отметки
- набрать вторую до риски и долить до края от первой, тогда входные данные будут такие:
входные данные - 3, 20, 41, 70, отнимаем 95, 85, 39, 20(если можем)
от 100: получим значения рисок второй пробирки - не надо
от 70: 31 и 50
от 41 : 2 и 20(не сохраняем)

вот и вырисовался алгоритм.
1) создаем какой-то класс для сохранения действий(Action например)
2) создаем словарь: Dictinary<int, Action> чтоб хранить все возможные значения, которые можем получить
3) заполняем словарь входными данными - значения рисок пробирок
4) выполняем определенное действие над каждым значением в словаре - в результате получаем новое значение для словаря: новый ключ(к-во мл) и новый путь для этого. если в словаре есть ключ с меньшим количеством действий - то не сохраняем, если с большим - то заменяем.
5) циклически выполняем действия пока не получим искомое значение - путь(порядок действий) к нему уже сохранен

Добавлено через 2 минуты
P.S. не претендую на эффективность алгоритма, наверняка можно найти более эффективное решение. например, построение графа и поиск пути по нему.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.04.2014, 11:31
Помогаю со студенческими работами здесь

Комбинаторные алгоритмы. Вывести на экран все возможные варианты действий художника
Помогите пожалуйста написать программу. Условие: Художнику предложили учавствовать в выставке. Право отобрать картины и их количество...

Комбинаторные алгоритмы: Выяснить, можно ли разделить элементы данного массива на два подмассива с одинаковой суммой элементов
Здравствуйте, помогите пожалуйста реализовать решение следующей задачи: &lt;&lt;&lt; Дан одномерный массив натуральных чисел....

Задача пробирки
В третьей пробирки налито 100мл жидкости. Используя риски первой и второй пробирки требуется получить заданное число мл в третьей пробирки....

Backtracking
Уважаемые, форумчане! Может кто-нибудь хорошо знаком с методом backtracking. Объясните, пожалуйста, в чем суть, а то везде написано про это...

Разница между DFS и Backtracking
Не могу никак понять в чём принципиальная разница между Поиском в глубину (DFS) и Поиском с возвратом (Backtracking). Предполагаю, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru