Este documento es un pedido de varios artículos con sus cantidades, precios unitarios y valores totales. El pedido asciende a un valor total de $8.314.000 y será pagado al contado. Fue realizado el 12/05/13 en Yondo por el cliente Reynaldo Ruiz Luna.
Este documento presenta una ficha de evaluación de un blog llamado "AGRO 2" responsable por Urbano Barbaran Chrithian Anthony. La ficha incluye puntajes semanales en criterios como puntualidad, creatividad, ortografía, diseño y responsabilidad, con promedios calculados. Al final hay una reflexión sobre poner más empeño en los estudios y trabajos futuros.
Este documento es un pedido de varios artículos con sus cantidades, precios unitarios y valores totales. El pedido asciende a un valor total de $8.314.000 y será pagado al contado. Fue realizado el 12/05/13 en Yondo por el cliente Reynaldo Ruiz Luna.
Este documento presenta una ficha de evaluación de un blog llamado "AGRO 2" responsable por Urbano Barbaran Chrithian Anthony. La ficha incluye puntajes semanales en criterios como puntualidad, creatividad, ortografía, diseño y responsabilidad, con promedios calculados. Al final hay una reflexión sobre poner más empeño en los estudios y trabajos futuros.
Guatelinda Express es una nueva aerolínea que ofrece vuelos directos entre Guatemala y varias ciudades de Estados Unidos y México. La aerolínea fue fundada en 2023 y opera una flota de aviones Boeing 737 y Airbus A320 que ofrecen asientos cómodos, wifi gratis e incluyen una botella de agua. Guatelinda Express busca convertirse en la principal opción de vuelos para viajeros que viajan entre Centroamérica y Norteamérica.
Felix Valles is a student at the University of Puerto Rico at Cayey pursuing a Bachelor's degree in Biology with the goal of attending veterinary school. He has gained research experience through the RISE program where he has presented papers on topics such as the inhibition of TNF-α and extra-pair paternity in birds. Valles also gained experience at a veterinary hospital in Ponce and has demonstrated skills in techniques such as protein separation using magnetic nanoparticles. He is fluent in Spanish and English and involved in the RISE program and a pre-vet student group.
Revista digital partiendo del estudio de caso "LUCIA".
Revista digital donde se plantea la trazabilidad del caso teniendo en cuenta desde los criterios 1,2 y 3 en el trabajo colaborativo 1, e incluyendo lo realizado en los criterios 4 y 5.
100 procent vývojářů to dělá zle. V 5 lidech jsme zabojovali a já po vyhodnocení zjistil, jak ve 3 krocích zdokonalit kteréhokoliv vývojáře.
Více na http://webexpo.cz/praha2012/prednaska/souboj-frameworku/
Este documento describe los procesos involucrados en la fabricación de papel y en el mantenimiento de una vía en Colombia. Explica las etapas de la fabricación de papel como la obtención de la celulosa, la formación de la hoja de papel y su secado y acabado. También describe los tres procesos principales de una concesión vial: operación, mantenimiento vial y recaudo de peajes, así como sus respectivos componentes y objetivos.
This document contains a collection of words in Spanish related to animals, parts of the body, fruits and vegetables, and family members. The words are arranged in scrambled letters within a grid and include terms like perro, manzana, ojo, madre, and primo.
A few years ago, Domo created a wildly-popular infographic that catalogued how much data is created by common web services every minute. Since the internet landscape changes so quickly, we thought it would be interesting to revisit the topic and see what’s changed, through the same ‘one minute’ lens. Enjoy!
El documento describe los pasos para crear una cuenta en una red social, incluyendo registrarse con un correo electrónico y contraseña, elegir un nombre de usuario, subir una foto de perfil, publicar contenido y hacer comentarios y amigos.
The document discusses concurrency and synchronization in distributed computing. It provides an overview of Petr Kuznetsov's research at Telecom ParisTech, which includes algorithms and models for distributed systems. Some key points discussed are:
- Concurrency is important due to multi-core processors and distributed systems being everywhere. However, synchronization between concurrent processes introduces challenges.
- Common synchronization problems include mutual exclusion, readers-writers problems, and producer-consumer problems. Tools for synchronization include semaphores, transactional memory, and non-blocking algorithms.
- Characterizing distributed computing models and determining what problems can be solved in a given model is an important area of research, with implications for distributed system design.
The document discusses weakly supervised learning from video and images using convolutional neural networks. It describes using scripts as weak supervision for learning actions from movies without explicit labeling. Methods are presented for jointly learning actors and actions from scripts, and for action learning with ordering constraints. The use of CNNs for object and action recognition in images is also summarized, including work on training CNNs using only image-level labels without bounding boxes.
Guatelinda Express es una nueva aerolínea que ofrece vuelos directos entre Guatemala y varias ciudades de Estados Unidos y México. La aerolínea fue fundada en 2023 y opera una flota de aviones Boeing 737 y Airbus A320 que ofrecen asientos cómodos, wifi gratis e incluyen una botella de agua. Guatelinda Express busca convertirse en la principal opción de vuelos para viajeros que viajan entre Centroamérica y Norteamérica.
Felix Valles is a student at the University of Puerto Rico at Cayey pursuing a Bachelor's degree in Biology with the goal of attending veterinary school. He has gained research experience through the RISE program where he has presented papers on topics such as the inhibition of TNF-α and extra-pair paternity in birds. Valles also gained experience at a veterinary hospital in Ponce and has demonstrated skills in techniques such as protein separation using magnetic nanoparticles. He is fluent in Spanish and English and involved in the RISE program and a pre-vet student group.
Revista digital partiendo del estudio de caso "LUCIA".
Revista digital donde se plantea la trazabilidad del caso teniendo en cuenta desde los criterios 1,2 y 3 en el trabajo colaborativo 1, e incluyendo lo realizado en los criterios 4 y 5.
100 procent vývojářů to dělá zle. V 5 lidech jsme zabojovali a já po vyhodnocení zjistil, jak ve 3 krocích zdokonalit kteréhokoliv vývojáře.
Více na http://webexpo.cz/praha2012/prednaska/souboj-frameworku/
Este documento describe los procesos involucrados en la fabricación de papel y en el mantenimiento de una vía en Colombia. Explica las etapas de la fabricación de papel como la obtención de la celulosa, la formación de la hoja de papel y su secado y acabado. También describe los tres procesos principales de una concesión vial: operación, mantenimiento vial y recaudo de peajes, así como sus respectivos componentes y objetivos.
This document contains a collection of words in Spanish related to animals, parts of the body, fruits and vegetables, and family members. The words are arranged in scrambled letters within a grid and include terms like perro, manzana, ojo, madre, and primo.
A few years ago, Domo created a wildly-popular infographic that catalogued how much data is created by common web services every minute. Since the internet landscape changes so quickly, we thought it would be interesting to revisit the topic and see what’s changed, through the same ‘one minute’ lens. Enjoy!
El documento describe los pasos para crear una cuenta en una red social, incluyendo registrarse con un correo electrónico y contraseña, elegir un nombre de usuario, subir una foto de perfil, publicar contenido y hacer comentarios y amigos.
The document discusses concurrency and synchronization in distributed computing. It provides an overview of Petr Kuznetsov's research at Telecom ParisTech, which includes algorithms and models for distributed systems. Some key points discussed are:
- Concurrency is important due to multi-core processors and distributed systems being everywhere. However, synchronization between concurrent processes introduces challenges.
- Common synchronization problems include mutual exclusion, readers-writers problems, and producer-consumer problems. Tools for synchronization include semaphores, transactional memory, and non-blocking algorithms.
- Characterizing distributed computing models and determining what problems can be solved in a given model is an important area of research, with implications for distributed system design.
The document discusses weakly supervised learning from video and images using convolutional neural networks. It describes using scripts as weak supervision for learning actions from movies without explicit labeling. Methods are presented for jointly learning actors and actions from scripts, and for action learning with ordering constraints. The use of CNNs for object and action recognition in images is also summarized, including work on training CNNs using only image-level labels without bounding boxes.
This document discusses common C++ bugs and tools to find them. It describes various types of memory access bugs like buffer overflows on the stack, heap, and globals that can lead to crashes or security vulnerabilities. Threading bugs like data races, deadlocks, and race conditions on object destruction are also covered. Other undefined behaviors like initialization order issues, lack of sequence points, and integer overflows are explained. The document provides examples of each type of bug and emphasizes that undefined behavior does not guarantee a predictable result. It concludes with a quiz to find bugs in a code sample and links to additional reading materials.
AddressSanitizer, ThreadSanitizer, and MemorySanitizer are compiler-based tools that detect bugs like buffer overflows, data races, and uninitialized memory reads in C/C++ programs. AddressSanitizer instruments loads and stores to detect out-of-bounds memory accesses. ThreadSanitizer intercepts synchronization calls to detect data races between threads. MemorySanitizer tracks initialized and uninitialized memory using shadow memory to find uses of uninitialized values. The tools have found thousands of bugs with low overhead. Future work includes supporting more platforms and languages and detecting additional bug classes.
This document discusses common C++ bugs and tools to find them. It describes various types of memory access bugs like buffer overflows on the stack, heap, and globals that can lead to crashes or security vulnerabilities. Threading bugs like data races, deadlocks, and race conditions on object destruction are also covered. Other undefined behaviors like initialization order issues, lack of sequence points, and integer overflows are explained. The document provides examples of each type of bug and quizzes the reader to find bugs in a code sample. It recommends resources for further reading on debugging techniques and thread sanitizers that can detect races and data races.
This document provides examples and snippets of code for MapReduce, Pig, Hive, Spark, Shark, and Disco frameworks. It also includes two sections of references for related papers and Disco documentation. The examples demonstrate basic MapReduce jobs with drivers, mappers, and reducers in Java, Pig and Hive queries, Spark and Shark table operations, and a Disco MapReduce job.
1. с/к “Эффективные алгоритмы”
Лекция 16: Динамическое программирование
А. Куликов
Computer Science клуб при ПОМИ
http://logic.pdmi.ras.ru/∼infclub/
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 1 / 40
2. План лекции
1 Введение
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 2 / 40
3. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 2 / 40
4. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 2 / 40
5. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 2 / 40
6. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 2 / 40
7. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
6 Кратчайшие пути
Кратчайшие надежные пути
Кратчайшие пути между всеми парами вершин графа
Задача о коммивояжере
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 2 / 40
8. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
6 Кратчайшие пути
Кратчайшие надежные пути
Кратчайшие пути между всеми парами вершин графа
Задача о коммивояжере
7 Независимые множества в деревьях
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 2 / 40
9. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
6 Кратчайшие пути
Кратчайшие надежные пути
Кратчайшие пути между всеми парами вершин графа
Задача о коммивояжере
7 Независимые множества в деревьях
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 3 / 40
10. Кратчайшие пути в направленных ациклических графах
Кратчайшие пути в направленных ациклических графах
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 4 / 40
11. Кратчайшие пути в направленных ациклических графах
Кратчайшие пути в направленных ациклических графах
Рассмотрим направленный ациклический направленный граф.
a 6
b
1 2
s 4 1 e
2 1
c 3
d
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 4 / 40
12. Кратчайшие пути в направленных ациклических графах
Кратчайшие пути в направленных ациклических графах
Рассмотрим направленный ациклический направленный граф.
a 6
b
1 2
s 4 1 e
2 1
c 3
d
Важным свойством такого графа является наличие
топологической сортировки его вершин.
3
s 2 c 4 a 6 1 1 e
b d
1 2
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 4 / 40
13. Кратчайшие пути в направленных ациклических графах
Кратчайшие пути в направленных ациклических графах
Рассмотрим направленный ациклический направленный граф.
a 6
b
1 2
s 4 1 e
2 1
c 3
d
Важным свойством такого графа является наличие
топологической сортировки его вершин.
3
s 2 c 4 a 6 1 1 e
b d
1 2
Допустим, мы хотим найти длину кратчайшего пути от вершины s
до вершины d .
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 4 / 40
14. Кратчайшие пути в направленных ациклических графах
Кратчайшие пути в направленных ациклических графах
Рассмотрим направленный ациклический направленный граф.
a 6
b
1 2
s 4 1 e
2 1
c 3
d
Важным свойством такого графа является наличие
топологической сортировки его вершин.
3
s 2 c 4 a 6 1 1 e
b d
1 2
Допустим, мы хотим найти длину кратчайшего пути от вершины s
до вершины d .
Ясно, что dist(d ) = min{dist(b) + 1, dist(c) + 3}.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 4 / 40
15. Кратчайшие пути в направленных ациклических графах
Алгоритм
DAG-Shortest-Paths(G , s)
1 инициализировать все значения массива dist значением ∞
2 dist(s) = 0
3 for v ∈ V ∖ {s} в топологической сортировке вершин
4 do dist(v ) = min(u,v )∈E {dist(u) + d (u, v )}
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 5 / 40
16. Кратчайшие пути в направленных ациклических графах
Алгоритм
DAG-Shortest-Paths(G , s)
1 инициализировать все значения массива dist значением ∞
2 dist(s) = 0
3 for v ∈ V ∖ {s} в топологической сортировке вершин
4 do dist(v ) = min(u,v )∈E {dist(u) + d (u, v )}
Замечание
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 5 / 40
17. Кратчайшие пути в направленных ациклических графах
Алгоритм
DAG-Shortest-Paths(G , s)
1 инициализировать все значения массива dist значением ∞
2 dist(s) = 0
3 for v ∈ V ∖ {s} в топологической сортировке вершин
4 do dist(v ) = min(u,v )∈E {dist(u) + d (u, v )}
Замечание
Алгоритм решает множество подзадач {dist(u), u ∈ V } в порядке
возрастания их “сложности”.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 5 / 40
18. Кратчайшие пути в направленных ациклических графах
Алгоритм
DAG-Shortest-Paths(G , s)
1 инициализировать все значения массива dist значением ∞
2 dist(s) = 0
3 for v ∈ V ∖ {s} в топологической сортировке вершин
4 do dist(v ) = min(u,v )∈E {dist(u) + d (u, v )}
Замечание
Алгоритм решает множество подзадач {dist(u), u ∈ V } в порядке
возрастания их “сложности”.
Говорим, что первая задача сложнее второй, если для решения
первой необходимо знать ответ для второй.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 5 / 40
20. Динамическое программирование
Динамическое программирование
Динамическое программирование решает задачу, разбивая её на
подзадачи и решая их от простых к сложным, периодически
используя ответы для уже решенных подзадач.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 6 / 40
21. Динамическое программирование
Динамическое программирование
Динамическое программирование решает задачу, разбивая её на
подзадачи и решая их от простых к сложным, периодически
используя ответы для уже решенных подзадач.
Подзадачи образуют направленный ациклический граф: из
вершины A идет ребро в вершину B, если для решения A
необходимо решить B.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 6 / 40
22. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
6 Кратчайшие пути
Кратчайшие надежные пути
Кратчайшие пути между всеми парами вершин графа
Задача о коммивояжере
7 Независимые множества в деревьях
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 7 / 40
23. Наибольшая возрастающая подпоследовательность
Определение
Задача о наибольшей возрастающей последовательности (longest
increasing subsequence problem) заключается в нахождении по данной
последовательности её возрастающей подпоследовательности
максимальной длины.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 8 / 40
24. Наибольшая возрастающая подпоследовательность
Определение
Задача о наибольшей возрастающей последовательности (longest
increasing subsequence problem) заключается в нахождении по данной
последовательности её возрастающей подпоследовательности
максимальной длины.
Пример
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 8 / 40
25. Наибольшая возрастающая подпоследовательность
Определение
Задача о наибольшей возрастающей последовательности (longest
increasing subsequence problem) заключается в нахождении по данной
последовательности её возрастающей подпоследовательности
максимальной длины.
Пример
Рассмотрим последовательность 5, 2, 8, 6, 3, 6, 9, 7.
5 2 8 6 3 6 9 7
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 8 / 40
26. Наибольшая возрастающая подпоследовательность
Определение
Задача о наибольшей возрастающей последовательности (longest
increasing subsequence problem) заключается в нахождении по данной
последовательности её возрастающей подпоследовательности
максимальной длины.
Пример
Рассмотрим последовательность 5, 2, 8, 6, 3, 6, 9, 7.
5 2 8 6 3 6 9 7
Ясно, что нам просто нужно найти длиннейший путь в этом графе.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 8 / 40
27. Алгоритм
Алгоритм
1 for j ← 1 to n
2 do L(j) ← 1 + max{L(i) : (i, j) ∈ E }
3 £ L(j) — длина максимальной последовательности,
заканчивающейся в j-м элементе
4 return maxj L(j)
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 9 / 40
29. Замечания
Замечания
Время работы есть O(n2 ).
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 10 / 40
30. Замечания
Замечания
Время работы есть O(n2 ).
Мы опять решали подзадачи вида {L(j) : 1 ≤ j ≤ n} с важным
свойством: на подзадачах задан частичный порядок и отношение,
определяющее, как решить задачу по ее более простым
подзадачам.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 10 / 40
31. Замечания
Замечания
Время работы есть O(n2 ).
Мы опять решали подзадачи вида {L(j) : 1 ≤ j ≤ n} с важным
свойством: на подзадачах задан частичный порядок и отношение,
определяющее, как решить задачу по ее более простым
подзадачам.
Наш алгоритм находит длину максимальной возрастающей
подпоследовательности, но его легко модифицировать так, чтобы
он находил и саму максимальную подпоследовательность.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 10 / 40
32. Рекурсия и динамическое программирование
Рекурсия и динамическое программирование
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 11 / 40
33. Рекурсия и динамическое программирование
Рекурсия и динамическое программирование
Рекурсивное определение: L(j) = 1 + max{L(1), L(2), . . . , L(j − 1)}.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 11 / 40
34. Рекурсия и динамическое программирование
Рекурсия и динамическое программирование
Рекурсивное определение: L(j) = 1 + max{L(1), L(2), . . . , L(j − 1)}.
L(4)
L(1) L(2) L(3)
L(1) L(1) L(2)
L(1)
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 11 / 40
35. Рекурсия и динамическое программирование
Рекурсия и динамическое программирование
Рекурсивное определение: L(j) = 1 + max{L(1), L(2), . . . , L(j − 1)}.
L(4)
L(1) L(2) L(3)
L(1) L(1) L(2)
L(1)
Эффективность динамического программирования достигается,
таким образом, за счет разумного перечисления подзадач и
порядка на них.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 11 / 40
36. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
6 Кратчайшие пути
Кратчайшие надежные пути
Кратчайшие пути между всеми парами вершин графа
Задача о коммивояжере
7 Независимые множества в деревьях
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 12 / 40
37. Стоимость редактирования
Определение
Задача о стоимости редактирования (edit distance problem)
заключается в нахождении минимального количества вставок,
удалений и замен букв, необходимых для того, чтобы из одного
входного слова получить другое.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 13 / 40
38. Стоимость редактирования
Определение
Задача о стоимости редактирования (edit distance problem)
заключается в нахождении минимального количества вставок,
удалений и замен букв, необходимых для того, чтобы из одного
входного слова получить другое.
Пример
E X P O N E N - T I A L
- - P O L Y N O M I A L
Стоимость равна 6.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 13 / 40
40. Подзадачи
Подзадачи
Важным моментом динамического программирования является
выбор подзадач.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 14 / 40
41. Подзадачи
Подзадачи
Важным моментом динамического программирования является
выбор подзадач.
Нам нужно найти стоимость редактирования строчек x[1 . . . m] и
y [1 . . . n].
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 14 / 40
42. Подзадачи
Подзадачи
Важным моментом динамического программирования является
выбор подзадач.
Нам нужно найти стоимость редактирования строчек x[1 . . . m] и
y [1 . . . n].
Естественной подзадачей является E (i, j) — стоимость
редактирования префикса длины i строчки x и префикса длины j
строчки y .
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 14 / 40
43. Подзадачи
Подзадачи
Важным моментом динамического программирования является
выбор подзадач.
Нам нужно найти стоимость редактирования строчек x[1 . . . m] и
y [1 . . . n].
Естественной подзадачей является E (i, j) — стоимость
редактирования префикса длины i строчки x и префикса длины j
строчки y .
Нашей целью является вычисление E (m, n).
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 14 / 40
44. Подзадачи
Подзадачи
Важным моментом динамического программирования является
выбор подзадач.
Нам нужно найти стоимость редактирования строчек x[1 . . . m] и
y [1 . . . n].
Естественной подзадачей является E (i, j) — стоимость
редактирования префикса длины i строчки x и префикса длины j
строчки y .
Нашей целью является вычисление E (m, n).
E (i, j) = min{1 + E (i − 1, j), 1 + E (i, j − 1), diff(i, j) + E (i − 1, j − 1)}.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 14 / 40
45. Подзадачи
Подзадачи
Важным моментом динамического программирования является
выбор подзадач.
Нам нужно найти стоимость редактирования строчек x[1 . . . m] и
y [1 . . . n].
Естественной подзадачей является E (i, j) — стоимость
редактирования префикса длины i строчки x и префикса длины j
строчки y .
Нашей целью является вычисление E (m, n).
E (i, j) = min{1 + E (i − 1, j), 1 + E (i, j − 1), diff(i, j) + E (i − 1, j − 1)}.
Значения E (i, j) записываются в таблицу, обходить которую
можно в любом порядке, лишь бы E (i, j) всегда шло позже, чем
E (i − 1, j), E (i, j − 1), E (i − 1, j − 1).
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 14 / 40
46. Алгоритм
Алгоритм
1 for i ← 0 to m
2 do E (i, 0) = i
3 for j ← 0 to n
4 do E (0, j) = j
5 for i ← 1 to m
6 do for j ← 1 to n
7 do E (i, j) ← min{E (i − 1, j) + 1, E (i, j − 1) + 1,
E (i − 1, j − 1) + diff(i, j)}
8 return E (m, n)
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 15 / 40
47. Соответствующий граф
P O L Y N O M I A L
E
X
P
O
N
E
N
T
I
A
L
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 16 / 40
48. Соответствующий граф
P O L Y N O M I A L
E
X
P
O
N
E
N
T
I
A
L
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 16 / 40
49. Соответствующий граф
P O L Y N O M I A L
E
X
P
O
N
E
N
T
I
A
L
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 16 / 40
50. Стандартные способы выбора подзадач
Стандартные способы выбора подзадач
вход подзадача
x1 , . . . , xn x1 , . . . , xi
x1 , . . . , xn и y1 , . . . , ym x1 , . . . , xi и y1 , . . . , yj
x1 , . . . , xn xi , . . . , xj
дерево поддерево
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 17 / 40
51. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
6 Кратчайшие пути
Кратчайшие надежные пути
Кратчайшие пути между всеми парами вершин графа
Задача о коммивояжере
7 Независимые множества в деревьях
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 18 / 40
52. Задача о рюкзаке
Определение
Задача о рюкзаке (knapsack problem) заключается в нахождении по
данному набору из n предметов со стоимостями v1 , . . . , vn и весами
w1 , . . . , wn , а также общему весу W поднабора веса не более W
максимальной стоимости.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 19 / 40
53. Задача о рюкзаке
Определение
Задача о рюкзаке (knapsack problem) заключается в нахождении по
данному набору из n предметов со стоимостями v1 , . . . , vn и весами
w1 , . . . , wn , а также общему весу W поднабора веса не более W
максимальной стоимости.
Алгоритм для рюкзака с повторениями
1 £ K (w ) — максимальная стоимость при весе не более w
2 K (0) = 0
3 for w ← 1 to W
4 do K (w ) ← max{K (w − wi ) + vi : wi ≤ w }
5 return K (W )
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 19 / 40
54. Рюкзак без повторений
Алгоритм для рюкзака без повторений
1 £ K (w , j) — максимальная стоимость при весе не более w
среди первых j предметов
2 for all j, w
3 do K (0, j) = K (w , 0) = 0
4 for j ← 1 to n
5 do for w ← 1 to W
6 do if wj > w
7 then K (w , j) ← K (w , j − 1)
8 else K (w , j) ← max{K (w , j − 1),
K (w − wj , j − 1) + vj }
9 return K (W , n)
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 20 / 40
56. Запоминание
Запоминание
Как мы уже видели, реализация вычисления решения для задачи
при помощи подзадач простой рекурсией может быть очень не
эффективной по той причине, что одни и те же вычисления будут
производиться многократно.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 21 / 40
57. Запоминание
Запоминание
Как мы уже видели, реализация вычисления решения для задачи
при помощи подзадач простой рекурсией может быть очень не
эффективной по той причине, что одни и те же вычисления будут
производиться многократно.
Можно, однако, избежать повторений в рекурсии.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 21 / 40
58. Запоминание
Запоминание
Как мы уже видели, реализация вычисления решения для задачи
при помощи подзадач простой рекурсией может быть очень не
эффективной по той причине, что одни и те же вычисления будут
производиться многократно.
Можно, однако, избежать повторений в рекурсии.
Рекурсивный алгоритм для рюкзака с повторениями
Knapsack(w )
1 if w есть в хэш-таблице
2 then return K (w )
3 K (w ) ← max{K (w − wi ) + vi : wi ≤ w }
4 добавить пару (w , K (w )) в хэш-таблицу
5 return K (w )
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 21 / 40
60. Запоминание
Запоминание
Данный алгоритм не решает по несколько раз одну и ту же
задачу, но все-таки тратит какое-то лишнее время на рекурсивные
вызовы.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 22 / 40
61. Запоминание
Запоминание
Данный алгоритм не решает по несколько раз одну и ту же
задачу, но все-таки тратит какое-то лишнее время на рекурсивные
вызовы.
Впрочем, такой трюк может иногда давать и выигрыш: метод
динамическго программирования решает каждую подзадачу, в то
время как рекурсия с запоминанием решает только подзадачи,
необходимые для вычисления конечного результата.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 22 / 40
62. Запоминание
Запоминание
Данный алгоритм не решает по несколько раз одну и ту же
задачу, но все-таки тратит какое-то лишнее время на рекурсивные
вызовы.
Впрочем, такой трюк может иногда давать и выигрыш: метод
динамическго программирования решает каждую подзадачу, в то
время как рекурсия с запоминанием решает только подзадачи,
необходимые для вычисления конечного результата.
Например, если общий вес рюкзака, а также веса всех предметов
кратны 100, то рекурсия с запоминанием будет рассматривать
только подзадачи, где вес также кратен 100, в то время как метод
динамического программирования переберет и все оставшиеся
подзадачи.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 22 / 40
63. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
6 Кратчайшие пути
Кратчайшие надежные пути
Кратчайшие пути между всеми парами вершин графа
Задача о коммивояжере
7 Независимые множества в деревьях
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 23 / 40
65. Перемножение нескольких матриц
Перемножение нескольких матриц
Пусть нам нужно вычислить произведение A × B × C × D матриц
размера 50 × 20, 20 × 1, 1 × 10, 10 × 100, соответственно.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 24 / 40
66. Перемножение нескольких матриц
Перемножение нескольких матриц
Пусть нам нужно вычислить произведение A × B × C × D матриц
размера 50 × 20, 20 × 1, 1 × 10, 10 × 100, соответственно.
Как известно, умножение матриц ассоциатвино, поэтому порядок,
в котором мы будем перемножать, на результат никак не влияет.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 24 / 40
67. Перемножение нескольких матриц
Перемножение нескольких матриц
Пусть нам нужно вычислить произведение A × B × C × D матриц
размера 50 × 20, 20 × 1, 1 × 10, 10 × 100, соответственно.
Как известно, умножение матриц ассоциатвино, поэтому порядок,
в котором мы будем перемножать, на результат никак не влияет.
Он, однако, может повлиять на время, необходимое для
перемножения.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 24 / 40
68. Перемножение нескольких матриц
Перемножение нескольких матриц
Пусть нам нужно вычислить произведение A × B × C × D матриц
размера 50 × 20, 20 × 1, 1 × 10, 10 × 100, соответственно.
Как известно, умножение матриц ассоциатвино, поэтому порядок,
в котором мы будем перемножать, на результат никак не влияет.
Он, однако, может повлиять на время, необходимое для
перемножения.
Простое перемножение матриц размера m × n и n × p требует mnp
умножений.
порядок количество перемножений
A × ((B × C ) × D) 120 000
(A × (B × C ) × D) 60 000
(A × B) × (C × D) 7 000
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 24 / 40
69. Представление порядков бинарными деревьями
D A D
C D A
A B B C B C
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 25 / 40
70. Представление порядков бинарными деревьями
D A D
C D A
A B B C B C
Количество таких деревьев экспоненциально.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 25 / 40
72. Подзадачи
Подзадачи
Ясно, что у оптимального дерева поддеревья также оптимальны.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 26 / 40
73. Подзадачи
Подзадачи
Ясно, что у оптимального дерева поддеревья также оптимальны.
В каждом поддереве вычисляется произведение вида
Ai × Ai+1 × · · · × Aj .
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 26 / 40
74. Подзадачи
Подзадачи
Ясно, что у оптимального дерева поддеревья также оптимальны.
В каждом поддереве вычисляется произведение вида
Ai × Ai+1 × · · · × Aj .
Пусть C (i, j) — минимальное количество умножений, необходимых
для вычисления Ai × Ai+1 × · · · × Aj .
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 26 / 40
75. Подзадачи
Подзадачи
Ясно, что у оптимального дерева поддеревья также оптимальны.
В каждом поддереве вычисляется произведение вида
Ai × Ai+1 × · · · × Aj .
Пусть C (i, j) — минимальное количество умножений, необходимых
для вычисления Ai × Ai+1 × · · · × Aj .
Тогда C (i, j) = mini≤k<j {C (i, k) + C (k + 1, j) + mi−1 · mk · mj }.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 26 / 40
76. Алгоритм
Алгоритм
1 for i ← 1 to n
2 do C (i, i) = 0
3 for s ← 1 to n − 1
4 do for i ← 1 to n − s £ s — размер подзадачи
5 do j = i + s
6 C (i, j) = mini≤k<j {C (i, k) + C (k + 1, j) + mi−1 · mk · m
7 return C (1, n)
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 27 / 40
77. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
6 Кратчайшие пути
Кратчайшие надежные пути
Кратчайшие пути между всеми парами вершин графа
Задача о коммивояжере
7 Независимые множества в деревьях
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 28 / 40
78. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
6 Кратчайшие пути
Кратчайшие надежные пути
Кратчайшие пути между всеми парами вершин графа
Задача о коммивояжере
7 Независимые множества в деревьях
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 29 / 40
79. Кратчайшие надежные пути
Определение
Задача о кратчайшем надежном пути (shortest reliable path problem)
заключается в нахождении по данному взвешенному графу с двумя
выделенными вершинами s и t, а также числу k кратчайшего пути из
s в t, состоящего не более чем из k ребер.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 30 / 40
80. Кратчайшие надежные пути
Определение
Задача о кратчайшем надежном пути (shortest reliable path problem)
заключается в нахождении по данному взвешенному графу с двумя
выделенными вершинами s и t, а также числу k кратчайшего пути из
s в t, состоящего не более чем из k ребер.
Подзадачи
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 30 / 40
81. Кратчайшие надежные пути
Определение
Задача о кратчайшем надежном пути (shortest reliable path problem)
заключается в нахождении по данному взвешенному графу с двумя
выделенными вершинами s и t, а также числу k кратчайшего пути из
s в t, состоящего не более чем из k ребер.
Подзадачи
Подзадачи нужно выбрать так, чтобы каким-нибудь образом
запоминалась информация о длине пути.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 30 / 40
82. Кратчайшие надежные пути
Определение
Задача о кратчайшем надежном пути (shortest reliable path problem)
заключается в нахождении по данному взвешенному графу с двумя
выделенными вершинами s и t, а также числу k кратчайшего пути из
s в t, состоящего не более чем из k ребер.
Подзадачи
Подзадачи нужно выбрать так, чтобы каким-нибудь образом
запоминалась информация о длине пути.
dist(v , i) есть длина кратчайшего пути, состоящего ровно из i
ребер, из s в v
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 30 / 40
83. Кратчайшие надежные пути
Определение
Задача о кратчайшем надежном пути (shortest reliable path problem)
заключается в нахождении по данному взвешенному графу с двумя
выделенными вершинами s и t, а также числу k кратчайшего пути из
s в t, состоящего не более чем из k ребер.
Подзадачи
Подзадачи нужно выбрать так, чтобы каким-нибудь образом
запоминалась информация о длине пути.
dist(v , i) есть длина кратчайшего пути, состоящего ровно из i
ребер, из s в v
dist(v , i) = min(u,v )∈E {dist(u, i − 1) + l (u, v )}
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 30 / 40
84. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
6 Кратчайшие пути
Кратчайшие надежные пути
Кратчайшие пути между всеми парами вершин графа
Задача о коммивояжере
7 Независимые множества в деревьях
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 31 / 40
85. Кратчайшие пути между всеми парами вершин графа
Определение
Задача о кратчайших путях между всеми парами вершин (all-pairs
shortest paths problem) заключается в нахождении по данному
взвешенному графу кратчайших расстояний между всеми парами
вершин. Предполагаем, что граф не содержит циклов отрицательного
веса.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 32 / 40
86. Кратчайшие пути между всеми парами вершин графа
Определение
Задача о кратчайших путях между всеми парами вершин (all-pairs
shortest paths problem) заключается в нахождении по данному
взвешенному графу кратчайших расстояний между всеми парами
вершин. Предполагаем, что граф не содержит циклов отрицательного
веса.
Подзадачи
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 32 / 40
87. Кратчайшие пути между всеми парами вершин графа
Определение
Задача о кратчайших путях между всеми парами вершин (all-pairs
shortest paths problem) заключается в нахождении по данному
взвешенному графу кратчайших расстояний между всеми парами
вершин. Предполагаем, что граф не содержит циклов отрицательного
веса.
Подзадачи
dist(i, j, k) — длина кратчайшего пути из i в j, все промежуточные
вершины которого принадлежат множеству {1, . . . , k}.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 32 / 40
88. Кратчайшие пути между всеми парами вершин графа
Определение
Задача о кратчайших путях между всеми парами вершин (all-pairs
shortest paths problem) заключается в нахождении по данному
взвешенному графу кратчайших расстояний между всеми парами
вершин. Предполагаем, что граф не содержит циклов отрицательного
веса.
Подзадачи
dist(i, j, k) — длина кратчайшего пути из i в j, все промежуточные
вершины которого принадлежат множеству {1, . . . , k}.
dist(i, j, k) = min{dist(i, k, k − 1) + dist(k, j, k − 1), dist(i, j, k − 1)}
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 32 / 40
89. Кратчайшие пути между всеми парами вершин графа
Определение
Задача о кратчайших путях между всеми парами вершин (all-pairs
shortest paths problem) заключается в нахождении по данному
взвешенному графу кратчайших расстояний между всеми парами
вершин. Предполагаем, что граф не содержит циклов отрицательного
веса.
Подзадачи
dist(i, j, k) — длина кратчайшего пути из i в j, все промежуточные
вершины которого принадлежат множеству {1, . . . , k}.
dist(i, j, k) = min{dist(i, k, k − 1) + dist(k, j, k − 1), dist(i, j, k − 1)}
Время работы соответствующего алгоритма — O(|V |3 ).
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 32 / 40
90. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
6 Кратчайшие пути
Кратчайшие надежные пути
Кратчайшие пути между всеми парами вершин графа
Задача о коммивояжере
7 Независимые множества в деревьях
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 33 / 40
91. Задача о коммивояжере
Определение
Задача о коммивояжере (traveling salesman problem) заключается в
нахождении по данному полному взвешенному графу гамильтонова
цикла минимальной стоимости.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 34 / 40
92. Задача о коммивояжере
Определение
Задача о коммивояжере (traveling salesman problem) заключается в
нахождении по данному полному взвешенному графу гамильтонова
цикла минимальной стоимости.
Замечания
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 34 / 40
93. Задача о коммивояжере
Определение
Задача о коммивояжере (traveling salesman problem) заключается в
нахождении по данному полному взвешенному графу гамильтонова
цикла минимальной стоимости.
Замечания
Количество различных циклов равно (n − 1)!.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 34 / 40
94. Задача о коммивояжере
Определение
Задача о коммивояжере (traveling salesman problem) заключается в
нахождении по данному полному взвешенному графу гамильтонова
цикла минимальной стоимости.
Замечания
Количество различных циклов равно (n − 1)!.
Естественной подзадачей в данном случае является начальная
часть цикла.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 34 / 40
95. Задача о коммивояжере
Определение
Задача о коммивояжере (traveling salesman problem) заключается в
нахождении по данному полному взвешенному графу гамильтонова
цикла минимальной стоимости.
Замечания
Количество различных циклов равно (n − 1)!.
Естественной подзадачей в данном случае является начальная
часть цикла.
Об этой начальной части мы должны знать её последнюю
вершину и множество внутренних вершин.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 34 / 40
96. Задача о коммивояжере
Определение
Задача о коммивояжере (traveling salesman problem) заключается в
нахождении по данному полному взвешенному графу гамильтонова
цикла минимальной стоимости.
Замечания
Количество различных циклов равно (n − 1)!.
Естественной подзадачей в данном случае является начальная
часть цикла.
Об этой начальной части мы должны знать её последнюю
вершину и множество внутренних вершин.
Для подмножества вершин S ⊆ {1, . . . , n}, содержащего 1 и
вершины j ∈ S C (S, j) есть длина кратчайшего пути,
начинающегося в вершине 1, заканчивающегося в вершине j и
проходящего ровно по разу все вершины множества S.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 34 / 40
97. Алгоритм
Алгоритм
TSP(G )
1 C ({1}, 1) = 0
2 for s ← 2 to n
3 do for S ⊆ {1, 2, . . . , n}, таких что |S| = s и 1 ∈ S
4 do C (S, 1) = ∞
5 for j ∈ S, j ̸= 1
6 do C (S, j) = mini∈S,i̸=j {C (S ∖ {j}, i) + di,j }
7 return minj C ({1, . . . , n}, j) + dj1
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 35 / 40
98. Алгоритм
Алгоритм
TSP(G )
1 C ({1}, 1) = 0
2 for s ← 2 to n
3 do for S ⊆ {1, 2, . . . , n}, таких что |S| = s и 1 ∈ S
4 do C (S, 1) = ∞
5 for j ∈ S, j ̸= 1
6 do C (S, j) = mini∈S,i̸=j {C (S ∖ {j}, i) + di,j }
7 return minj C ({1, . . . , n}, j) + dj1
Время работы
Время работы алгоритма есть O(n2 2n ). Полученный алгоритм хоть и
гораздо быстрее полного перебора, но все же совершенно бесполезен
на практике: экспоненциально не только время работы, но еще и
память.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 35 / 40
99. План лекции
1 Введение
2 Наибольшая возрастающая подпоследовательность
3 Стоимость редактирования
4 Задача о рюкзаке
5 Перемножение нескольких матриц
6 Кратчайшие пути
Кратчайшие надежные пути
Кратчайшие пути между всеми парами вершин графа
Задача о коммивояжере
7 Независимые множества в деревьях
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 36 / 40
100. Независимые множества в деревьях
Определение
Задача о максимальном независимом множестве (independent set
problem) заключается в нахождении по данному графу множества
попарно не соединенных ребрами вершин максимального размера.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 37 / 40
101. Независимые множества в деревьях
Определение
Задача о максимальном независимом множестве (independent set
problem) заключается в нахождении по данному графу множества
попарно не соединенных ребрами вершин максимального размера.
Идеи
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 37 / 40
102. Независимые множества в деревьях
Определение
Задача о максимальном независимом множестве (independent set
problem) заключается в нахождении по данному графу множества
попарно не соединенных ребрами вершин максимального размера.
Идеи
В общем случае задача NP-трудна, но если входной граф
является деревом, то может быть решена за линейное время.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 37 / 40
103. Независимые множества в деревьях
Определение
Задача о максимальном независимом множестве (independent set
problem) заключается в нахождении по данному графу множества
попарно не соединенных ребрами вершин максимального размера.
Идеи
В общем случае задача NP-трудна, но если входной граф
является деревом, то может быть решена за линейное время.
Пусть I (u) — размер максимального независимого множества в
поддереве с корнем в u.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 37 / 40
104. Независимые множества в деревьях
Определение
Задача о максимальном независимом множестве (independent set
problem) заключается в нахождении по данному графу множества
попарно не соединенных ребрами вершин максимального размера.
Идеи
В общем случае задача NP-трудна, но если входной граф
является деревом, то может быть решена за линейное время.
Пусть I (u) — размер максимального независимого множества в
поддереве с корнем в u.
{︁ ∑︀ ∑︀ }︁
I (u) = max 1 + w — внук u I (w ), w — сын u I (w )
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 37 / 40
105. Об используемой памяти
Об используемой памяти
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 38 / 40
106. Об используемой памяти
Об используемой памяти
Как правило, время работы алгоритма, основанного на методе
динамического программирования, равно количеству вершин в
соответствующем графе.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 38 / 40
107. Об используемой памяти
Об используемой памяти
Как правило, время работы алгоритма, основанного на методе
динамического программирования, равно количеству вершин в
соответствующем графе.
Ясно, что объема памяти, пропорционального количеству вершин,
будет достаточно, но иногда можно обойтись и меньшим объемом.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 38 / 40
108. Об используемой памяти
Об используемой памяти
Как правило, время работы алгоритма, основанного на методе
динамического программирования, равно количеству вершин в
соответствующем графе.
Ясно, что объема памяти, пропорционального количеству вершин,
будет достаточно, но иногда можно обойтись и меньшим объемом.
Например, если для подсчета значения dist(·, ·, k + 1) необходимы
только значения dist(·, ·, k), то нет никакой небходимости в
каждый момент хранить значения для всех k.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 38 / 40
109. Что мы узнали за сегодня?
Что мы узнали за сегодня?
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 39 / 40
110. Что мы узнали за сегодня?
Что мы узнали за сегодня?
Метод динамического программирования применим тогда, когда
решение задачи сводится к решению нескольких более простых
перекрывающихся задач.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 39 / 40
111. Что мы узнали за сегодня?
Что мы узнали за сегодня?
Метод динамического программирования применим тогда, когда
решение задачи сводится к решению нескольких более простых
перекрывающихся задач.
Основным моментом метода является определение подзадач и
способа построения решения из решений для более простых задач.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 39 / 40
112. Что мы узнали за сегодня?
Что мы узнали за сегодня?
Метод динамического программирования применим тогда, когда
решение задачи сводится к решению нескольких более простых
перекрывающихся задач.
Основным моментом метода является определение подзадач и
способа построения решения из решений для более простых задач.
По задаче, таким образом, строится ориентированный
ациклический граф.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 39 / 40
113. Что мы узнали за сегодня?
Что мы узнали за сегодня?
Метод динамического программирования применим тогда, когда
решение задачи сводится к решению нескольких более простых
перекрывающихся задач.
Основным моментом метода является определение подзадач и
способа построения решения из решений для более простых задач.
По задаче, таким образом, строится ориентированный
ациклический граф.
Время работы, как правило, равно количеству вершин этого
графа.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 39 / 40
114. Что мы узнали за сегодня?
Что мы узнали за сегодня?
Метод динамического программирования применим тогда, когда
решение задачи сводится к решению нескольких более простых
перекрывающихся задач.
Основным моментом метода является определение подзадач и
способа построения решения из решений для более простых задач.
По задаче, таким образом, строится ориентированный
ациклический граф.
Время работы, как правило, равно количеству вершин этого
графа.
Используемая память может быть и меньше.
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 39 / 40
115. Спасибо за внимание!
А. Куликов (CS клуб при ПОМИ) 16. Динамическое программирование 40 / 40