Разбор задачи Ханты-Мансийск - Париж

Содержание

Слайд 2

Основная идея Если можно передавать сообщение напрямую, то это выгоднее, чем

Основная идея

Если можно передавать сообщение напрямую, то это выгоднее, чем в

обход
Таким образом, необходимо передавать в следующий часовой пояс
Всегда происходит ровно четыре передачи
Друзья в часовых поясах Ханты-Мансийска и Парижа не нужны
Слайд 3

Решение за O(n^3) Перебрать через кого в Дубае, Москве и Калининграде

Решение за O(n^3)

Перебрать через кого в Дубае, Москве и Калининграде передается

сообщение и посчитать стоимость такой передачи
40 баллов
Слайд 4

Построение графа Вершины – люди Ребра – стоимость передачи сообщения напрямую

Построение графа

Вершины – люди
Ребра – стоимость передачи сообщения напрямую от одного

человека к другому
Всего O(n) вершин и O(n^2) ребер
Слайд 5

Поиск кратчайшего пути Алгоритм Флойда за O(n^3) – 40 баллов Алгоритм

Поиск кратчайшего пути

Алгоритм Флойда за O(n^3) – 40 баллов
Алгоритм Дейкстры за

O(n^2) – 60 баллов
Поиск кратчайшего пути в ациклическом графе за O(n^2) – 60 баллов
Слайд 6

Динамическое программирование (ДП) Для каждого человека считать минимальную стоимость передачи сообщения

Динамическое программирование (ДП)

Для каждого человека считать минимальную стоимость передачи сообщения этому

человеку
Считать последовательно для часовых поясов Дубая, Москвы и Калинирграда
Слайд 7

ДП за O(n^2) Для каждого человека перебирать кто из предыдущего часового

ДП за O(n^2)

Для каждого человека перебирать кто из предыдущего часового пояса

передает ему сообщение
Стоимость равна сумме минимальной стоимости передать этому человеку из предыдущего пояса и стоимости последнего сообщения
Стоимость передачи этому человеку – минимум из таких стоимостей
60 баллов
Слайд 8

Улучшение ДП за O(n^2) Когда n - большое Для каждого часового

Улучшение ДП за O(n^2)

Когда n - большое
Для каждого часового пояса оставлять

некоторое количество самых лучших значений
Если оставлять около 3000 – 70 баллов
Слайд 9

ДП за O(n log n) Все номера в каждой зоне –

ДП за O(n log n)

Все номера в каждой зоне – отсортированы
Для

каждой длины совпадающего префикса, используя двоичный поиск, находится отрезок людей в предыдущей зоне с таким префиксом
Находится минимум на этом отрезке, например с использованием дерева отрезков.
Каждый подсчет значения – за O(log n)
100 баллов
Слайд 10

ДП за O(n) Все номера в каждом поясе – отсортированы Идея

ДП за O(n)

Все номера в каждом поясе – отсортированы
Идея «двух указателей»

и два прохода в разных направлениях
В предыдущем часовом поясе указатель указывает на строку, меньшую строки в текущем
Для каждой длины префикса хранится минимальная стоимость передать сообщение людям в предыдущем поясе с совпадающим префиксом
Слайд 11

ДП за O(n) При перемещении указателя в предыдущем поясе эти значения

ДП за O(n)

При перемещении указателя в предыдущем поясе эти значения пересчитываются
Для

человека в текущем поясе стоимость считается, перебирая длину совпадающего с человеком из предыдущего пояса префикса
Сортировать можно за O(n) цифровой сортировкой, но можно и за O(n log n)
100 баллов
Слайд 12

Meet-in-the-middle Считать для каждого человека из Москвы минимальную стоимость передачи сообщения

Meet-in-the-middle

Считать для каждого человека из Москвы минимальную стоимость передачи сообщения ему

из Ханты-Мансийска и от него в Париж
Передавать сообщение человеку А, живущему в Москве, из Ханты-Мансийска нужно через человека с ближайшим номером или к Поликарпу, или к А
Считать можно за O(n) «двумя указателями»
100 баллов
Слайд 13

«Жадные» решения Каждый раз выбирать ближайший номер в следующем часовом поясе 24 балла

«Жадные» решения

Каждый раз выбирать ближайший номер в следующем часовом поясе
24 балла