Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м
м
Строка 1: Строка 1:
печальная статья.
+
__TOC__
Определение: [[Оптимальный префиксный код]] с сохранением порядка(англ. ''order-preserving code'', ''alphabetic code'')
+
== Определение ==
Пусть у нас есть алфавит <tex> \Sigma </tex>. Каждому символу <tex>c_i </tex> сопоставим его код <tex> p_i </tex>. Кодирование называется оптимальным префиксным с сохранением порядка, если:
+
{{Определение  
# Условие порядка - <tex> \forall i, j : c_i < c_j \iff p_i < p_j </tex>. То есть, если символ c_i лексикографически меньше символа c_j, его код также будет [[лексикографический порядок | лексикографически]] меньше, и наоборот.
+
| definition =
# Условие оптимальности - <tex> \sum\limits_{i = 1}^{|\Sigma|} f_i \cdot |p_i| </tex> - минимально, где f_i - количество(или вероятность) встретить символ c_i в тексте, а |p_i| - длина его кода.
+
[[Оптимальный префиксный код]] с сохранением порядка(англ. ''order-preserving code'', ''alphabetic code'').
 +
 +
Пусть у нас есть алфавит <tex> \Sigma </tex>. Каждому символу <tex>c_i </tex> сопоставим его код <tex> p_i </tex>. Кодирование называется оптимальным префиксным с сохранением порядка, если соблюдаются:
 +
# Условие порядка - <tex> \forall i, j : c_i < c_j \iff p_i < p_j </tex>. То есть, если символ <tex>c_i </tex> лексикографически меньше символа <tex> c_j </tex>, его код также будет [[лексикографический порядок | лексикографически]] меньше, и наоборот.
 +
# Условие оптимальности - <tex> \sum\limits_{i = 1}^{|\Sigma|} f_i \cdot |p_i| </tex> - минимально, где <tex> f_i </tex> - количество(или вероятность) встретить символ <tex> c_i </tex> в тексте, а <tex>|p_i| </tex> - длина его кода.
 +
}}
  
 +
== Алгоритм ==
 
Алгоритм нахождения оптимального префиксного кода с сохранением порядка.
 
Алгоритм нахождения оптимального префиксного кода с сохранением порядка.
Решим задачу используя ДП на подотрезках. Пусть в ячейке D[i][j] хранится минимальная стоимость кодового дерева(???) для отрезка алфавита от i до j.
+
Решим задачу, используя ДП на подотрезках. Пусть в ячейке D[i][j] хранится минимальная стоимость кодового дерева для отрезка алфавита от i до j.
Определение точки разреза:
+
 
R[i][j]
+
Тогда пересчет D[i][j] будет происходить так:
Пересчет:
+
 
<tex> D[i][j] = \min\limits_{k = i}^{j - 1} D[i][k] + D[k + 1][j] + S </tex>
+
<tex> D[i][j] = \min\limits_{k = i}^{j - 1} \left ( D[i][k] + D[k + 1][j] \right ) + \sum\limits_{t = i}^{j} f_t </tex>
 +
 
 +
Добавочный член <tex> \sum\limits_{t = i}^{j} f_t </tex> возникает от того что каждым объединением двух подотрезков мы увеличиваем высоту дерева на 1, а значит, и длины всех кодов символов <tex> c_i - c_j </tex> также увеличиваются на 1.
 +
 
 +
Тогда такое k, на котором достигается этот минимум, называется точкой разреза для отрезка [i, j]. Пусть в ячейке R[i][j] хранится точка разреза на отрезке [i, j].
 +
 
 +
== Монотонность точки разреза ==
 +
{{Теорема
 +
| about=
 +
Монотонность точки разреза
 +
| statement=
 +
<tex> R[i][j - 1] \leq R[i][j] \leq R[i + 1][j] </tex>
 +
| proof=
 +
????
 +
}}

Версия 16:19, 16 декабря 2010

Определение

Определение:
Оптимальный префиксный код с сохранением порядка(англ. order-preserving code, alphabetic code).

Пусть у нас есть алфавит [math] \Sigma [/math]. Каждому символу [math]c_i [/math] сопоставим его код [math] p_i [/math]. Кодирование называется оптимальным префиксным с сохранением порядка, если соблюдаются:

  1. Условие порядка - [math] \forall i, j : c_i \lt c_j \iff p_i \lt p_j [/math]. То есть, если символ [math]c_i [/math] лексикографически меньше символа [math] c_j [/math], его код также будет лексикографически меньше, и наоборот.
  2. Условие оптимальности - [math] \sum\limits_{i = 1}^{|\Sigma|} f_i \cdot |p_i| [/math] - минимально, где [math] f_i [/math] - количество(или вероятность) встретить символ [math] c_i [/math] в тексте, а [math]|p_i| [/math] - длина его кода.


Алгоритм

Алгоритм нахождения оптимального префиксного кода с сохранением порядка. Решим задачу, используя ДП на подотрезках. Пусть в ячейке D[i][j] хранится минимальная стоимость кодового дерева для отрезка алфавита от i до j.

Тогда пересчет D[i][j] будет происходить так:

[math] D[i][j] = \min\limits_{k = i}^{j - 1} \left ( D[i][k] + D[k + 1][j] \right ) + \sum\limits_{t = i}^{j} f_t [/math]

Добавочный член [math] \sum\limits_{t = i}^{j} f_t [/math] возникает от того что каждым объединением двух подотрезков мы увеличиваем высоту дерева на 1, а значит, и длины всех кодов символов [math] c_i - c_j [/math] также увеличиваются на 1.

Тогда такое k, на котором достигается этот минимум, называется точкой разреза для отрезка [i, j]. Пусть в ячейке R[i][j] хранится точка разреза на отрезке [i, j].

Монотонность точки разреза

Теорема (Монотонность точки разреза):
[math] R[i][j - 1] \leq R[i][j] \leq R[i + 1][j] [/math]
Доказательство:
[math]\triangleright[/math]
????
[math]\triangleleft[/math]