Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза — различия между версиями
Proshev (обсуждение | вклад) |
Martoon (обсуждение | вклад) м (Орфографическая ошибка) |
||
| Строка 23: | Строка 23: | ||
Тогда такое ''наибольшее'' k, на котором достигается этот минимум, называется точкой разреза для отрезка <tex> i..j </tex>. Пусть в ячейке <tex> R[i][j] </tex> хранится точка разреза на отрезке <tex> i..j </tex>. | Тогда такое ''наибольшее'' k, на котором достигается этот минимум, называется точкой разреза для отрезка <tex> i..j </tex>. Пусть в ячейке <tex> R[i][j] </tex> хранится точка разреза на отрезке <tex> i..j </tex>. | ||
| − | Если разрез происходит по какому - то определенному индексу <tex> q </tex> , такой разрез обозначим <tex> D_q[i][j] </tex>. | + | Если разрез происходит по какому-то определенному индексу <tex> q </tex> , такой разрез обозначим <tex> D_q[i][j] </tex>. |
Таким образом, получили алгоритм, работающий за <tex> O(n^3) </tex>. Коды каждого символа можно легко получить так же, как в алгоритме Хаффмена - обходом по построенному дереву. | Таким образом, получили алгоритм, работающий за <tex> O(n^3) </tex>. Коды каждого символа можно легко получить так же, как в алгоритме Хаффмена - обходом по построенному дереву. | ||
Версия 08:05, 23 декабря 2012
Содержание
Определение
| Определение: |
| Оптимальный префиксный код с сохранением порядка(англ. order-preserving code, alphabetic code).
Пусть у нас есть алфавит . Каждому символу сопоставим его код . Кодирование называется оптимальным префиксным с сохранением порядка(алфавитным), если соблюдаются:
|
Алгоритм
Решим задачу, используя ДП на подотрезках. Пусть в ячейке хранится минимальная стоимость кодового дерева для отрезка алфавита от i до j.
Тогда пересчет будет происходить так:
Базой динамики будет
Добавочный член возникает от того что каждым объединением двух подотрезков мы увеличиваем высоту дерева на 1, а значит, и длины всех кодов символов также увеличиваются на 1.
Тогда такое наибольшее k, на котором достигается этот минимум, называется точкой разреза для отрезка . Пусть в ячейке хранится точка разреза на отрезке .
Если разрез происходит по какому-то определенному индексу , такой разрез обозначим .
Таким образом, получили алгоритм, работающий за . Коды каждого символа можно легко получить так же, как в алгоритме Хаффмена - обходом по построенному дереву.
Если доказать монотонность точки разреза, то можно уменьшить асимптотику алгоритма до .
Монотонность точки разреза
Для доказательства этого сперва докажем несколько лемм.
| Определение: |
| Функция a удовлетворяет неравенству четырехугольника(quadrangle inequation), если
|
| Лемма: |
w удовлетворяет неравенству четырехугольника. |
| Доказательство: |
|
Заметим, что , так как - простая арифметическая сумма. Тогда: |
| Лемма: |
Если w удовлетворяет неравенству четырехугольника, то D также удовлетворяет неравенству четырехугольника, то есть:
|
| Доказательство: |
|
При или , очевидно, неравенство выполняется. Рассмотрим два случая:
|
| Теорема (Монотонность точки разреза): |
Если w удовлетворяет неравенству четырехугольника, то:
|
| Доказательство: |
|
В случае неравенство, очевидно, выполняется. Рассматриваем случай и только случай (вторая часть доказывается аналогично): Так как - максимальный индекс, в котором достигается минимум, достаточно показать, что:
Докажем более сильное неравенство:
|
Объяснение квадратичной асимптотики
Рассмотрим матрицу R. Так как отрезки , где мы не рассматриваем, она будет верхнетреугольной. Вначале она будет заполнена так, что (так как для отрезка, состоящего из одного элемента, он же и является точкой разреза). Далее, для любого элемента его значения лежат между (левый элемент в матрице) и (нижний элемент в матрице). Так как мы используем динамику по подотрезкам, то сначала мы рассчитаем R для отрезков длины 2, затем 3, и так далее до n. Фактически, мы будем обходить диагонали матрицы, количество которых равно n.
Рассмотрим элемент . Для него выполняется . Следующий элемент, который мы будем пересчитывать - . Для него выполняется . Таким образом, заполняя одну диагональ, алгоритм сделает не более n шагов, а так как диагоналей n, получили асимптотику .
Использованные материалы
S.V. Nagaraj - Tutorial: Optimal binary search trees
Д. Э. Кнут - Искусство программирования: Сортировка и поиск, Том 3