Академический Документы
Профессиональный Документы
Культура Документы
Чтобы решить поставленную задачу, требуется на самом деле отдельно просчитать каждый
из возможных вариантов набора предметов, после чего выбрать из всех решенных подзадач
одно оптимальное решение. Часто многие из этих подзадач одинаковы. Подход динамического
программирования состоит в том, чтобы решить каждую подзадачу только один раз, сократив
тем самым количество вычислений. Этого возможно достигнуть запомнив результа-ты решения
тех подзадач, которые могут повторно встретиться в дальнейшем., очевидно, более
предпочтителен.
=ЕСЛИ(C$6>=ГПР($A8;$C$1:$G$3;2);
ЕСЛИ(C7>ИНДЕКС($B7:$O7;;C$6-ГПР($A8;$C$1:$G$3;2)+1)+ГПР($A8;$C$1:$G$3;3);
C7;ИНДЕКС($B7:$O7;;C$6-ГПР($A8;$C$1:$G$3;2)+1)+ГПР($A8;$C$1:$G$3;3));C7)
Формула представляет собой суперпозицию двух функций ЕСЛИ (то есть одна функция
является одним из аргументов другой). Внешняя функция ЕСЛИ анализирует вопрос
вместимости текущего k-го предмета в рюкзак, а внутренняя определяет целесообразность
помещения этого предмета в рюкзак.
Проанализируем аргументы, входящие в эту формулу:
C$6 – это значение вместимости s для текущего вычисляемого A(k, s). Номер строки адреса
ячейки зафиксирован абсолютным, так как при копировании этой формулы в другие ячейки
данные для значений s необходимо выбирать именно из этой строки!
ГПР($A8 ; $C$1:$G$3 ; 2) – это вес wk, значение которого необходимо выбрать из таблицы
данных (второй аргумент стандартной функции горизонтального просмотра ГПР). Имя столбца
первого аргументы функции (количества k рассматриваемых для набора предметов)
зафиксировано абсолютным, так как при копировании этой формулы в другие ячейки данные
для значений k необходимо выбирать именно из этого столбца! Адреса диапазона ячеек
справочной таблицы имеют абсолютный тип также для ссылки на таблицу, размещенную
именно в этом диапазоне из любой ячейки, куда будет скопирована формула. Третий аргумент
функции ГПР, указывающий на номер строки справочной таблицы, где размещено искомое
значение wk , равен 2.
Сравнивая эти два значения в логическом выражении первого аргумента внешней функции
ЕСЛИ, мы фактически решаем вопрос о возможности помещения текущего k-го предмета в
рюкзак вместимости s.
В случае если значение логического выражения равно «ИСТИНА» необходимо выбрать
максимум из значений A(k-1, s) и A(k-1, s-wk)+pk. Их сравнение представлено в логическом
аргументе вложенной функции ЕСЛИ:
C7>ИНДЕКС($B7:$O7;;C$6-ГПР($A8;$C$1:$G$3;2)+1)+ГПР($A8;$C$1:$G$3;3)
Здесь С7 – адрес ячейки, где размещено уже вычисленное значение A(k-1, s). Значение A(k-1,
s-wk) выбираем с помощью стандартной функции ИНДЕКС из предыдущей строки матрицы.
Первый аргумент указывает диапазон ячеек, откуда осуществляется выбор $B7:$O7. Здесь
имена столбцов также зафиксированы абсолютными для возможности копирования формулы в
другие ячейки. Второй аргумент пропущен ( об этом свидетельствует повторяющийся знак
точки с запятой), так как выбор осуществляется не из матрицы, а из строки данных. Третий
аргумент позволяет вычислить s-wk номер позиции искомого элемента в указанной строке. С$6
– адрес ячейки, где размещено текущее значение s, функция ГПР позволяет отыскать значение
wk в справочной таблице. Учитывая, что номер размещения может начинаться с единицы, а
вычисленная разность может равняться нулю, прибавляем единицу в третьем аргументе
функции ИНДЕКС. Значение pk выбирается из справочной таблицы с помощью стандартной
функции ГПР и прибавляется к найденному значению A(k-1, s-wk).
В случае, если значение логического выражения равно «ЛОЖЬ», то есть рассматриваемый
предмет в рюкзак не вмещается, оставляем A(k, s) (максимальную стоимость предметов,
находящихся в рюкзаке) прежним, то есть A(k-1, s). Поэтому последний, третий аргумент
внешней функции ЕСЛИ позволяет скопировать уже подсчитанное значение из предыдущей
строки таблицы - C7.
Второй и третий аргументы вложенной функции ЕСЛИ равны соответственно A(k-1, s) и
A(k-1, s-wk)+pk. Внешний вид расчетной таблицы приведен на рис. 16. Одним из достоинств
приведенного метода является то, что исходные данные не требуют предварительного
упорядочивания. В этом можно убедиться на рис. 17, где решается та же задача, но исходные
данные упорядочены по другому принципу. Обратите внимание, что алгоритм указывает на те
же самые предметы, но их номера при новой нумерации изменены.
Второй этап. Восстановление набора предметов, из которых состоит максима-льно дорогой
рюкзак выполняется анализом построенной матрицы А. Начиная с последнего элемента
последней строки матрицы A(5, 13), имеющим максималь-ное значение, восстанавливаем ответ.
Будем определять, входит ли очередной предмет в искомый набор, сравнивая последовательно
это значение со значе-ниями этого же столбца, но находящимися выше то есть с A(i-1, w).
Таким образом мы сравниваем с максимальной стоимостью рюкзака с такой же вместимостью и
набором допустимых предметов { n1, n2, …, ni-1}. Заметим, что в случае, если A(i, w) равно A(i-1,
w), предмет с номером i не входит в искомый набор. Найдя первое значение меньшее исходного
и находящееся на строке l, делаем вывод о присутствии l+1-го предмета в оптимальном
рюкзаке. Для определения номера следующего предмета сравниваем A(l+1, w) с максимальной
стоимостью рюкзака с вместимостью на wi меньше и набором допустимых предметов { n1, n2,
…, nl}. Таким образом переходим к столбцу матрицы с номером w wl+1 и поднимаемся по
этому столбцу вверх от строки l до первого изменения значения в строке с некоторым номером
r. Изменение значения свидетельствует о необходимости включить предмет с номером r+1 в
оптимальный набор. И так далее.
A B C D E F G H I J K L M N O P
1 i 1 2 3 4 5
2 w 8 4 3 5 9
е
3 p 7 6 1 4 6
4 b
5 W 13
6 1 1 1 1
A 0 1 2 3 4 5 6 7 8 9 0 1 2 3
7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8 входит 1 предмет с Стоимос
1 0 0 0 0 0 0 0 0 7 7 7 7 7 7 массой 8 тью 7
9 1 1 входит 2 предмет с Стоимос
2 0 0 0 0 6 6 6 6 7 7 7 7 3 3 массой 4 тью 6
10 1 1
3 0 0 0 1 6 6 6 7 7 7 7 8 3 3
11 1 1 1 1 1
4 0 0 0 1 6 6 6 7 7 0 0 0 3 3
12 1 1 1 1 1
5 0 0 0 1 6 6 6 7 7 0 0 0 3 3
это те же
предметы!