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

Материал из Викиконспекты
Перейти к: навигация, поиск
м
м
Строка 30: Строка 30:
 
| definition=
 
| definition=
 
Функция a удовлетворяет '''неравенству четырехугольника(quadrangle inequation)''', если
 
Функция a удовлетворяет '''неравенству четырехугольника(quadrangle inequation)''', если
: <tex>\forall i \leq i' \leq j \leq j' : a[i][j] + a[i'][j'] \leq a[i'][j] + a[i][j']</tex>
+
: <tex>\forall i \le i' \le j \le j' : a[i][j] + a[i'][j'] \le a[i'][j] + a[i][j']</tex>
 
}}
 
}}
  
Строка 36: Строка 36:
 
| definition=
 
| definition=
 
Функция a является '''монотонной(monotone)''', если
 
Функция a является '''монотонной(monotone)''', если
: <tex>\forall i \leq i' < j \leq j' : a[i][j'] \leq a[i'][j] </tex>
+
: <tex>\forall i \le i' < j \le j' : a[i][j'] \le a[i'][j] </tex>
 
}}
 
}}
  
Строка 44: Строка 44:
 
| proof=
 
| proof=
 
Заметим, что <tex> w[i][j] = w[i][t] + w[t+1][j] </tex>, так как <tex> w[i][j] </tex> - простая арифметическая сумма. Тогда:
 
Заметим, что <tex> w[i][j] = w[i][t] + w[t+1][j] </tex>, так как <tex> w[i][j] </tex> - простая арифметическая сумма. Тогда:
: <tex> w[i][j] + w[i'][j'] \leq w[i'][j] + w[i][j']</tex>
+
: <tex> w[i][j] + w[i'][j'] \le w[i'][j] + w[i][j']</tex>
: <tex> (w[i][i' - 1] + w[i'][j]) + (w[i'][j] + w[j + 1][j']) \leq (w[i'][j]) + (w[i][i' - 1] + w[i'][j] + w[j + 1][j']) </tex>
+
: <tex> (w[i][i' - 1] + w[i'][j]) + (w[i'][j] + w[j + 1][j']) \le (w[i'][j]) + (w[i][i' - 1] + w[i'][j] + w[j + 1][j']) </tex>
 
Получили <tex> 0 \leq 0 </tex>, что является верным. Лемма доказана.
 
Получили <tex> 0 \leq 0 </tex>, что является верным. Лемма доказана.
 
}}
 
}}
Строка 56: Строка 56:
  
 
Рассмотрим два случая:
 
Рассмотрим два случая:
# i' = j
+
# <tex> i' = j </tex>
: i < i' = j < j'. Тогда неравенство четырехугольника сводится к:
+
#: <tex> i < i' = j < j' </tex>. Тогда неравенство четырехугольника сводится к:
: D[i][j] + D[j][j'] \leq D[i][j']
+
#: <tex> D[i][j] + D[j][j'] \le D[i][j'] </tex>
: Пусть k = R[i][j']. Получили два симметричных случая:
+
#: Пусть <tex> k = R[i][j'] </tex>. Получили два симметричных случая:
## k \leq j
+
## <tex> k \le j </tex>
:: D[i][j] + D[j][j'] \leq w[i][j] + D[i][k-1] + D[k][j] + D{j][j'] - по определению D[i][j].
+
##: <tex> D[i][j] + D[j][j'] \le w[i][j] + D[i][k-1] + D[k][j] + D[j][j'] </tex> - по определению <tex> D[i][j] </tex>
:: <= w[i][j'] + D[i][k-1] + D[k][j] + D{j][j'] - по монотонности w
+
##: <tex> \le w[i][j'] + D[i][k-1] + D[k][j] + D[j][j'] </tex> - по монотонности w
:: <= w[i][j'] + D[i][k-1] + D[k][j'] - по предположению индукции
+
##: <tex> \le w[i][j'] + D[i][k-1] + D[k][j'] </tex> - по предположению индукции
:: <= D[i][j'] - по определению D[i][j']
+
##: <tex> \le D[i][j'] </tex> - по определению <tex> D[i][j'] </tex>
## k \geq j - аналогичный предыдущему случай.
+
## <tex> k \ge j </tex> - аналогичный предыдущему случай.
# i' < j
+
# <tex> i' < j </tex>
: i < i' < j < j'
+
#: <tex> i < i' < j < j' </tex>
Пусть y = R[i'][j] и z = R[i][j]. Получили два различных симметричных случая:
+
#: Пусть <tex> y = R[i'][j] </tex> и <tex> z = R[i][j] </tex>. Получили два различных симметричных случая:
z \leq y или z \geq y. Рассмотрим первый из них.
+
## <tex> z \le y </tex>
 
+
##: Получили z \le y \le j (по определению y) и i < z(по определению z). Получим:
Получили z \leq y \leq j (по определению y) и i < z(по определению z). Получим:
+
##: <tex> D[i'][j'] + D[i][j] \le D_y[i'][j'] + D_z[i][j] = w[i'][j'] + D[i'][y-1] + D[y][j'] + w[i][j] + D[i][z-1] + D[z][j] </tex>
 
+
##: <tex> \le w[i][j'] + w[i'][j] + D[i'][y-1] + D[i][z-1] + D[z][j] + D[y][j'] </tex> - по неравенству четырехугольника для <tex> w </tex>
D[i'][j'] + D[i][j] \leq D_y[i'][j'] + D_z[i][j] = w[i'][j'] + D[i'][y-1] + D[y][j'] + w[i][j] + D[i][z-1] + D[z][j]
+
##: <tex> \le w[i][j'] + w[i'][j] + D[i'][y-1] + D[i][z-1] + D[y][j] + D[z][j'] </tex> - по индукционному предположению
\leq w[i][j'] + w[i'][j] + D[i'][y-1] + D[i][z-1] + D[z][j] + D[y][j'] - по неравенству четырехугольника для w
+
##: <tex> = (w[i][j'] + D[i][z-1] + D[z][j']) + (w[i'][j] + D[i'][y-1] + D[y][j]) </tex> //переставить нормально
\leq w[i][j'] + w[i'][j] + D[i'][y-1] + D[i][z-1] + D[y][j] + D[z][j'] - по индукционному предположению
+
##: <tex> \le D[i][j'] + D[i'][j] </tex> - по определению D.
= (w[i][j'] + D[i][z-1] + D[z][j']) + (w[i'][j] + D[i'][y-1] + D[y][j]) //переставить нормально
+
## <tex> z \ge y </tex> доказывается аналогично
\leq D[i][j'] + D[i'][j] - по определению D.
 
 
 
 
Индукционный шаг завершен, лемма доказана.
 
Индукционный шаг завершен, лемма доказана.
 
}}
 
}}
Строка 86: Строка 84:
 
Монотонность точки разреза
 
Монотонность точки разреза
 
| statement=
 
| statement=
<tex> R[i][j - 1] \leq R[i][j] \leq R[i + 1][j] </tex>
+
<tex> R[i][j - 1] \le R[i][j] \le R[i + 1][j] </tex>
 
| proof=
 
| proof=
 
Для доказательства этого сперва докажем несколько лемм:
 
Для доказательства этого сперва докажем несколько лемм:
  
 
}}
 
}}

Версия 03:45, 18 декабря 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] - длина его кода.


Алгоритм

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

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

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

Базой динамики будет [math] D[i][i] = 0 [/math]

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

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

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

Для доказательства этого сперва докажем несколько лемм.


Определение:
Функция a удовлетворяет неравенству четырехугольника(quadrangle inequation), если
[math]\forall i \le i' \le j \le j' : a[i][j] + a[i'][j'] \le a[i'][j] + a[i][j'][/math]


Определение:
Функция a является монотонной(monotone), если
[math]\forall i \le i' \lt j \le j' : a[i][j'] \le a[i'][j] [/math]


Лемма:
w удовлетворяет неравенству четырехугольника.
Доказательство:
[math]\triangleright[/math]

Заметим, что [math] w[i][j] = w[i][t] + w[t+1][j] [/math], так как [math] w[i][j] [/math] - простая арифметическая сумма. Тогда:

[math] w[i][j] + w[i'][j'] \le w[i'][j] + w[i][j'][/math]
[math] (w[i][i' - 1] + w[i'][j]) + (w[i'][j] + w[j + 1][j']) \le (w[i'][j]) + (w[i][i' - 1] + w[i'][j] + w[j + 1][j']) [/math]
Получили [math] 0 \leq 0 [/math], что является верным. Лемма доказана.
[math]\triangleleft[/math]
Лемма:
Если w удовлетворяет неравенству четырехугольника и монотонна, то D также удовлетворяет неравенству четырехугольника.
Доказательство:
[math]\triangleright[/math]

При [math] i = i' [/math] или [math] j = j' [/math], очевидно, неравенство выполняется.

Рассмотрим два случая:

  1. [math] i' = j [/math]
    [math] i \lt i' = j \lt j' [/math]. Тогда неравенство четырехугольника сводится к:
    [math] D[i][j] + D[j][j'] \le D[i][j'] [/math]
    Пусть [math] k = R[i][j'] [/math]. Получили два симметричных случая:
    1. [math] k \le j [/math]
      [math] D[i][j] + D[j][j'] \le w[i][j] + D[i][k-1] + D[k][j] + D[j][j'] [/math] - по определению [math] D[i][j] [/math]
      [math] \le w[i][j'] + D[i][k-1] + D[k][j] + D[j][j'] [/math] - по монотонности w
      [math] \le w[i][j'] + D[i][k-1] + D[k][j'] [/math] - по предположению индукции
      [math] \le D[i][j'] [/math] - по определению [math] D[i][j'] [/math]
    2. [math] k \ge j [/math] - аналогичный предыдущему случай.
  2. [math] i' \lt j [/math]
    [math] i \lt i' \lt j \lt j' [/math]
    Пусть [math] y = R[i'][j] [/math] и [math] z = R[i][j] [/math]. Получили два различных симметричных случая:
    1. [math] z \le y [/math]
      Получили z \le y \le j (по определению y) и i < z(по определению z). Получим:
      [math] D[i'][j'] + D[i][j] \le D_y[i'][j'] + D_z[i][j] = w[i'][j'] + D[i'][y-1] + D[y][j'] + w[i][j] + D[i][z-1] + D[z][j] [/math]
      [math] \le w[i][j'] + w[i'][j] + D[i'][y-1] + D[i][z-1] + D[z][j] + D[y][j'] [/math] - по неравенству четырехугольника для [math] w [/math]
      [math] \le w[i][j'] + w[i'][j] + D[i'][y-1] + D[i][z-1] + D[y][j] + D[z][j'] [/math] - по индукционному предположению
      [math] = (w[i][j'] + D[i][z-1] + D[z][j']) + (w[i'][j] + D[i'][y-1] + D[y][j]) [/math] //переставить нормально
      [math] \le D[i][j'] + D[i'][j] [/math] - по определению D.
    2. [math] z \ge y [/math] доказывается аналогично
Индукционный шаг завершен, лемма доказана.
[math]\triangleleft[/math]
Теорема (Монотонность точки разреза):
[math] R[i][j - 1] \le R[i][j] \le R[i + 1][j] [/math]
Доказательство:
[math]\triangleright[/math]
Для доказательства этого сперва докажем несколько лемм:
[math]\triangleleft[/math]