Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2010, 14:26   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию Задача про мост

Добрый день! Есть задача про мост и фонарь. Вот например: В спешке не пропустить начало нового сериала, семья ночью подошла к мосту. Папа может перейти его за 1 минуту, мама — за 2, сынишка — за 5, а бабушка — за 10 минут. У них есть один фонарик, а мост выдерживает только двоих. За сколько минут все они смогут его перейти при лучшей организации своего движения?
Условия для особо придирчивых: Если переходят двое, то они идут с меньшей из скоростей. Идти по мосту без фонарика нельзя. Светить издали нельзя. Носить друг друга на руках нельзя. Бросать фонарик нельзя.

Как дейтсвовать в этом конкретном примере понятно, но мне нужна стратегия для всех возможных случаев. Кто-нибудь может словами описать стратегию поведения если количество человек произвольное?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 04.09.2010, 15:01   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А мне кажется, что алгоритм очевиден: фонарик должен носить самый быстрый. Порядок остальных неважен.
Кстати, длительность перехода очевидно вычисляется по формуле.
Пусть N - количество членов семьи (при этом N>1), и T1 T2 .. Tn - длительность перехода каждого члена семьи, при этом минимальное время обозначим через Tmin
тогда
Код:
ВремяПерехода = T1 + T2 + .. Tn  - Tmin +  (n-2)*Tmin
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.09.2010, 15:06   #3
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

эм пробовала так. Но если данные такие 1 2 10 10 15 то будет правильнее медленных вести вместе.
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 04.09.2010, 15:42   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
то будет правильнее медленных вести вместе.
не понял. поясните. В какой последовательности и за сколько Вы собираетесь перевести?

по моему алгоритму, фонарик носит обратно тот у кого время прохождения минимально, в данном случае — одна минута.
Общее время прохождения 2 + 10 + 10 + 15 + 3*1 = 40 минут.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.09.2010, 15:52   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Слышал о таких задачах и давным давно убедился, что предлагаемый выше способ не является оптимальным. Есть способ круче. Вот только лично я его не помню.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 04.09.2010, 16:07   #6
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

правильнее будет увести сначала 1,2. 1 возвращается передет фонарь и идут 10 и 15
затем 2 возвращается и идут 1 и 10 затем 1 возвращается берет 2 и идет и выходит 31

может быть кто-нибудь помнит?
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Stilet; 06.09.2010 в 10:01.
Sparky вне форума Ответить с цитированием
Старый 04.09.2010, 16:48   #7
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

http://archive.ite.journal.informs.o...rimbergHurley/
Если просто нужен алгоритм - п.4. Если нужно разобраться - пп.3-4. Если нужно глубоко покопать, тогда - книги по динамическому программированию и принципу Беллмана в частности.
Vago вне форума Ответить с цитированием
Старый 04.09.2010, 17:23   #8
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Могу забрутфорсить все варианты и написать какой будет оптимальный по времени )))
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 04.09.2010, 17:54   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Ого. Признаю. Был неправ.


Цитата:
1 2 10 10 15
правильнее будет увести сначала 1,2. 1 возвращается передет фонарь и идут 10 и 15
затем 2 возвращается и идут 1 и 10 затем 1 возвращается берет 2 и идет и выходит 31
Вы правы в алгоритме, но чуть ошиблись в расчётах.
идут 1 и 2 = 2 мин
1 возвращается = 1 мин
10 и 15 идут = 15 минут
2 возвращается = 2 мин
идут 1 и 2 = 2 мин
1 возвращается = 1 мин
1 и 10 идут = 10 минут
итого: 33 минуты

Vago, снимаю шляпу. Спасибо за науку!
не поленюсь запостить перевод финального алгоритма из пункта 4 (взятый по ссылке выше):
Цитата:
Шаг 1 - Взять двух самых быстрых членов группы (скажем, номера 1 и 2) и перевести их на нужный берег. После самый быстрый из них возвращает фонарик на исходный берег.

Шаг 2 - Из остальных членов на исходной стороне, отправить двух самых медленных на нужный берег, второй быстрый член группы (число 2) возвращает фонарик на исходный берег.

Шаг 3 - Вернитесь к шагу 1 и повторяйте процесс, пока кто-нибудь остаётся на исходном берегу.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.09.2010, 18:25   #10
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Самое смешное, что чуть ниже в этом самом п.4 приведен пример, когда этот алгоритм оптимального решения не даёт! Там в ссылках упоминается работа Роте, в ней есть универсальный алгоритм.
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как работает мост между подключениями в Windows? jojahti Свободное общение 2 28.09.2009 14:15
AMD. Северный мост. Охлаждение ПК. Web-Gangsta Компьютерное железо 17 28.07.2009 15:26
Задача про лифт Askar_g Общие вопросы C/C++ 3 05.02.2009 13:01
Задача про функцию dez2007 Помощь студентам 2 03.02.2009 18:46
Задача про 3 прямые meds Паскаль, Turbo Pascal, PascalABC.NET 5 17.11.2008 12:24