4551
правка
Irina (обсуждение | вклад) |
Irina (обсуждение | вклад) |
||
Строка 32: | Строка 32: | ||
'''Кодирование длин серий''' | '''Кодирование длин серий''' | ||
Строка S кодируется по длине серии, если она описывается упорядоченной последовательностью пар <math>(\sigma, i)</math>, часто обозначаемых как | Строка S кодируется по длине серии, если она описывается упорядоченной последовательностью пар <math>(\sigma, i)</math>, часто обозначаемых как <math>\sigma^i</math>, каждая из которых состоит из символа алфавита, <math>\sigma</math>, и целого числа, i. Каждая пара соответствует ''длине серии'' в S, состоящей из i последовательных вхождений a. Например, строка ''aaabbbbbaccccbb'' может быть закодирована в виде <math>a^3 b^4 a^1 c^4 b^2</math> или, что эквивалентно, (a, 3) (b, 4) (a, 1) (c, 4) (b, 2). Пусть A и B – две строки длиной n и m, соответственно, A' и B' – закодированные при помощи длин серий строки A и B, а n' и m' – строк длины A' и B', соответственно. | ||
'''Задача 1''' | '''Задача 1''' | ||
Дано: две строки | Дано: две строки A' и B', закодированные при помощи длин серий; метрика оценки d. | ||
Требуется: найти сходство между | Требуется: найти сходство между A' и B' с использованием метрики d. | ||
'''Сжатие Лемпеля-Зива (LZ-компрессия)''' | '''Сжатие Лемпеля-Зива (LZ-компрессия)''' | ||
Пусть X и Y – две строки длиной O(n); | Пусть X и Y – две строки длиной O(n); X' и Y' – сжатые алгоритмом LZ строки X и Y, соответственно. Тогда длины X' и Y' равны O(hn/log n), где </math>h \le 1</math> – энтропия строк X и Y. | ||
'''Задача 2''' | '''Задача 2''' | ||
Дано: две LZ-сжатые строки | Дано: две LZ-сжатые строки X' и Y', метрика оценки d. | ||
Требуется: найти сходство между | Требуется: найти сходство между X' и Y' с использованием метрики d. | ||
'''Блочное вычисление''' | '''Блочное вычисление''' | ||
Для эффективного вычисления сходства между сжатыми строками можно использовать метод блочного вычисления. Таблицы динамического программирования делятся на подматрицы, называемые | Для эффективного вычисления сходства между сжатыми строками можно использовать метод блочного вычисления. Таблицы динамического программирования делятся на подматрицы, называемые ''блоками''. Для строк с кодированием длин серий блок представляет собой подматрицу, состоящую из двух элементов – серий по A и серий по B. Для строк с LZ-сжатием блоком является подматрица, состоящая из двух фраз – по одной фразе из каждой строки. Подробнее об этом см. в [5]. Затем блоки вычисляются слева направо и сверху вниз. Для каждого блока вычисляются только нижняя строка и крайний правый столбец. Пример вычисления блоков приведен на рис. 1. | ||
== Основные результаты == | == Основные результаты == |
правка