- •Лабораторная работа 2: Динамическое программирование и жадные алгоритмы
- •Задание 1. Типы данных, арифметика
- •Задание 2. Максимальная сумма непрерывного подмассива
- •Задание 3. Расшифровка сигнала
- •Задание 4. Минимальная стоимость пути.
- •Задание 5. Возведение в степень
- •Задание 6.1 Поездка до Владивостока.
- •Задание 7. Размен
- •Задание 7. Кладоискатели
- •Контрольные вопросы:
Задание 3. Расшифровка сигнала
Даны две символьные последовательности, полученные из двух перехваченных фрагментов зашифрованных сообщений:
a="QWJXNTZLPMRAVKSDHUEYCIFOGBQRWPELKJHGFDSAMNBVCXZQWERTYUIOPLKJHGFDSAZXCVBNMQWERTYUIOPASDFGHJKLZXCVBNMTRXQPLMNSHADOWPROTOCOLDELTASEVENXK91REDNODEALPHAOMEGASIGMATRACEVECTORCYBERLATTICEPHANTOMKEYMIRRORCHAINQUANTUMDRIFTHELIXSIGNALCRYPTONOVAARCGRIDZETAFRAMEDELTAFORGESTELLARCODEXIONPATHWAYNEXUSLOCKSEQUENCEPRIMEGLYPHAXIOMLAYEROBSIDIANLINKVORTEXCHANNELSPECTRALCOREMATRIXFUSIONTHREADKRYPTOSPHEREZLQMWNXPTRAKVSHDUEYFICOGBLRAPQMTNZXCVWQPOIUYTREWQLKJHGFDSAMNBVCXZQWERT" b="MNBVCXZLKJHGFDSAPOIUYTREWQZXCVBNMASDFGHJKLQWERTYUIOPMNBVCXZLKJHGFDSAQWERTYUIOPZXCVBNMLKJHGFDSAPROTOCOLSHADOWDELTASEVENXK91REDNODEALPHAOMEGASIGMATRACEVECTORCYBERLATTICEPHANTOMKEYMIRRORCHAINQUANTUMDRIFTHELIXSIGNALCRYPTONOVAARCGRIDZETAFRAMEDELTAFORGESTELLARCODEXIONPATHWAYNEXUSLOCKSEQUENCEPRIMEGLYPHAXIOMLAYEROBSIDIANLINKVORTEXCHANNELSPECTRALCOREMATRIXFUSIONTHREADKRYPTOSPHEREPLKMIJNUHBYGVTFCRDXESZWAQOMNPLKJIHGFEDCBAVTREWQLZXCVBNMASDFGHJKQWERTYUIOPLKJHG" |
Предполагается, что в этих сообщениях может содержаться общий скрытый фрагмент одинаковая подпоследовательность символов, которая встречается в обоих сообщениях в одном и том же порядке, но не обязательно подряд. Необходимо определить длину наибольшей общей подпоследовательности и восстановить один из возможных вариантов такого общего фрагмента.
Требуется реализовать решение с использованием двумерной таблицы динамического программирования. Программа должна вывести длину найденной общей подпоследовательности, восстановленную последовательность символов и таблицу промежуточных значений, на основе которой строилось решение.
После выполнения необходимо объяснить, что хранится в каждой ячейке таблицы, как формируется рекуррентное соотношение и почему при решении данной задачи возникают пересекающиеся подзадачи.
Задание 4. Минимальная стоимость пути.
Рассматривается задача построения маршрута для автономного робота-доставщика на складе. Склад представлен в виде сетки размером 128 × 128, где каждая ячейка содержит стоимость прохода через соответствующий участок. Эта стоимость может отражать затраты энергии, сложность проезда, загруженность прохода или наличие препятствий. Робот начинает движение из левого верхнего угла склада и должен добраться до правого нижнего угла, двигаясь только вправо или вниз. Необходимо определить маршрут с минимальной суммарной стоимостью.
Требуется реализовать алгоритм динамического программирования, который находит минимальную стоимость пути и восстанавливает сам маршрут в виде последовательности координат. После выполнения необходимо объяснить, что в данной задаче является состоянием динамического программирования, как формируется переход между состояниями и почему выбор клетки с наименьшей локальной стоимостью на каждом шаге не гарантирует нахождения оптимального маршрута.
Примечание: для генерации матрицы используйте следующий код:
grid = [ [((i * 13 + j * 19 + 5) % 7) + 1 for j in range(128)] for i in range(128) ]
for i in range(40, 90): for j in range(50, 55): grid[i][j] = 20
for i in range(70, 100): for j in range(80, 120): grid[i][j] = 15 |
