Это вопрос из моего промежуточного уровня сегодня, и мне интересно, как это решить. Все, что я знаю, это доказать жадный алгоритм с использованием индукции.Жадный алгоритм для завершения задачи с ограничением времени
Вопрос:
Вы работаете над проектом программирования. Есть n Java-классов C1, C2, ..., Cn (так говорит босс-архитектор). Архитектор также говорит, что эти классы должны быть реализованы по порядку (вам не разрешено выполнять C2 до завершения C1 и т. Д.).
Каждый из классов Java занимает не более 8 часов для реализации. Вы работаете ровно 8 часов в день, и вы не должны оставлять Java-класс незавершенным в конце дня.
Чтобы завершить проект как можно скорее, стратегия состоит в том, чтобы реализовать столько классов, сколько вы можете каждый день. Докажите, что эта жадная стратегия действительно является оптимальной. (Подсказка: пусть ti будет общее количество классов, завершенных в первые i дни, используя вышеприведенную стратегию. Стратегия всегда остается впереди, если ti не меньше, чем общее количество классов, выполненных за первые i дни, используя любую другую стратегию)
Похоже, что ограничения только дают вам одну возможную стратегию - выполняйте классы по порядку, начиная с одного, только если осталось достаточно времени, чтобы закончить его. Любая другая стратегия нарушит правила, как вы описали. – Krease
@ Крис, но как вы это докажете? – underthemistletoe
@Chris Алгоритм выполнения класса с максимальным временем, требуемым до тех пор, пока вы не сможете ничего сделать, не нарушает никаких правил и, вероятно, лучше. – ppperry