Изменения

Перейти к: навигация, поиск

Алгоритмы LZ77 и LZ78

579 байт добавлено, 13:04, 21 апреля 2020
offset > length !!!!
| <tex>\fbox{$ab$}acabacabadaca</tex> || <tex>a</tex> || <tex>\langle 2, 1, c \rangle</tex> ||
|-
| <tex>\fbox{$abac$}abacabadaca</tex> || <tex>abacaba</tex> || <tex>\langle 4, 7, d \rangle</tex> || Здесь выгодно сделать так, что <tex>offset > < length</tex>
|-
| <tex>abacaba\fbox{$cabad$}aca</tex> || <tex>a</tex> || <tex>\langle 2, 1, c \rangle</tex> || Последовательность <tex>aca</tex> уже встречалась, но она находится за пределами окна, и <tex>\mathrm{LZ77}</tex> её не находит
dict[buffer + s[i]] = dict.length + 1 <font color=green>// добавляем слово в словарь</font>
buffer = "" <font color=green>// сбрасываем буфер</font>
'''if''' not (buffer is empty): <font color=green>// если буффер не пуст - этот код уже был, нужно его добавить в конец словаря</font>
last_ch = buffer.peek() <font color=green>// берем последний символ буффера, как "новый" символ</font>
buffer.pop() <font color=green>// удаляем последний символ из буфера</font>
ans.push({dict[buffer], last_ch}) <font color=green>// добавляем пару в ответ</font>
'''return''' ans
</code>
| <tex>\varnothing</tex> || <tex>abacababacabc</tex> || {{---}} || <tex>\langle 0, a \rangle</tex> || В словаре ничего не нашлось, вместо номера в словаре указываем <tex>0</tex>
|-
| <tex>a</tex> || <tex>bacababacabcbbacababacabc</tex> || {{---}} || <tex>\langle 0, b \rangle</tex> ||
|-
| <tex>a</tex>, <tex>b</tex> || <tex>acababacabc</tex> || <tex>a</tex> || <tex>\langle 1, c \rangle</tex> || Нашелся префикс <tex>a</tex> (слова в словаре нумеруются с <tex>1</tex>), добавляем <tex>ac</tex>
Анонимный участник

Навигация