Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 7

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

08.04.2014, 23:15. Показов 4221. Ответов 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
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru