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

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

08.04.2014, 23:15. Показов 4348. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru