Обсуждение участника:Сергей — различия между версиями
Сергей (обсуждение | вклад) (Новая страница: «'''== Преобразование Барроуза-Уиллера =='''») |
Сергей (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| − | '''== Преобразование | + | == Определение == |
| + | |||
| + | {{Определение | ||
| + | |definition = | ||
| + | '''Преобразование Барроуза — Уилера''' ('''Burrows-Wheeler transform, BWT''') — это алгоритм, используемый в техниках сжатия данных для преобразования исходных данных. }} | ||
| + | bzip2 использует преобразование Барроуза-Уилера для превращения последовательностей многократно чередующихся символов в строки одинаковых символов, затем применяет преобразование MTF (англ. move-to-front), и в конце кодирование Хаффмана. | ||
| + | |||
| + | == Описание алгоритма== | ||
| + | |||
| + | Преобразование выполняется в три этапа. На первом этапе составляется таблица всех циклических сдвигов входной строки. На втором этапе производится лексикографическая (в алфавитном порядке) сортировка строк таблицы. На третьем этапе в качестве выходной строки выбирается последний столбец таблицы преобразования. Следующий пример иллюстрирует описанный алгоритм: | ||
| + | |||
| + | Пусть нам дана исходная строка <tex>s = </tex>''"ABACABA"''. | ||
| + | |||
| + | {| border="1" | ||
| + | !colspan="4"|Трансформация | ||
| + | |- | ||
| + | ! Вход || Все<br />Перестановки || Сортировка<br />Строк || Выход | ||
| + | |- | ||
| + | | | ||
| + | <font color="red">ABACABA</font> | ||
| + | | | ||
| + | <font color="red">ABACABA</font> | ||
| + | BACABAA | ||
| + | ACABAAB | ||
| + | CABAABA | ||
| + | ABAABAC | ||
| + | BAABACA | ||
| + | AABACAB | ||
| + | | | ||
| + | AABACAB | ||
| + | ABAABAC | ||
| + | <font color="red">ABACABA</font> | ||
| + | ACABAAB | ||
| + | BAABACA | ||
| + | BACABAA | ||
| + | CABAABA | ||
| + | | | ||
| + | BCABAAA | ||
| + | |} | ||
| + | |||
| + | Результат вкрадце запишем так: <tex>BWT(s)=</tex>(''"BCABAAA"'', 3), где 3 - это номер исходной строки в отсортированной матрице, так как он может понадобиться для обратного преобразования. | ||
| + | |||
| + | |||
| + | |||
| + | == Обратное преобразование == | ||
| + | |||
| + | Пусть нам дано: <tex>BWT(s)=</tex>(''"BCABAAA"'', 3). Тогда выпишем в столбик нашу преобразованную последовательность символов ''"BCABAAA"''. Запишем её как последний столбик предыдущей матрицы (при прямом преобразовании Барроуза — Уилера), при этом все предыдущие столбцы оставляем пустыми. Далее построчно отсортируем матрицу, затем в предыдущий столбец запишем ''"BCABAAA"''. Опять построчно отсортируем матрицу. Продолжая таким образом, можно восстановить полный список всех циклических перестановок строки, которую нам надо найти. Выстроив полный отсортированный список перестановок, выберем строку с номером, который нам был изначально дан. В итоге мы получим искомую строку. | ||
| + | Алгоритм обратного преобразования описан в таблице ниже: | ||
| + | |||
| + | {| border="1" | ||
| + | !colspan="8"| Обратное преобразование | ||
| + | |- | ||
| + | !colspan="8"| Вход | ||
| + | |- | ||
| + | |align="center" colspan="8"| | ||
| + | BCABAAA | ||
| + | |- | ||
| + | ! Добавление 1 || Сортировка 1 || Добавление 2 || Сортировка 2 || Добавление 3 || Сортировка 3 || Добавление 4 | ||
| + | |-align="right" | ||
| + | | | ||
| + | B | ||
| + | C | ||
| + | A | ||
| + | B | ||
| + | A | ||
| + | A | ||
| + | A | ||
| + | | | ||
| + | A | ||
| + | A | ||
| + | A | ||
| + | A | ||
| + | B | ||
| + | B | ||
| + | C | ||
| + | | | ||
| + | BA | ||
| + | CA | ||
| + | AA | ||
| + | BA | ||
| + | AB | ||
| + | AB | ||
| + | AC | ||
| + | | | ||
| + | AA | ||
| + | AB | ||
| + | AB | ||
| + | AC | ||
| + | BA | ||
| + | BA | ||
| + | CA | ||
| + | | | ||
| + | BAA | ||
| + | CAB | ||
| + | AAB | ||
| + | BAC | ||
| + | ABA | ||
| + | ABA | ||
| + | ACA | ||
| + | | | ||
| + | AAB | ||
| + | ABA | ||
| + | ABA | ||
| + | ACA | ||
| + | BAA | ||
| + | BAC | ||
| + | CAB | ||
| + | | | ||
| + | BAAB | ||
| + | CABA | ||
| + | AABA | ||
| + | BACA | ||
| + | ABAA | ||
| + | ABAC | ||
| + | ACAB | ||
| + | |- | ||
| + | ! Сортировка 4 || Добавление 5 || Сортировка 5 || Добавление 6 || Сортировка 6 || Добавление 7 || Сортировка 7 | ||
| + | |||
| + | |-align="right" | ||
| + | | | ||
| + | AABA | ||
| + | ABAA | ||
| + | ABAC | ||
| + | ACAB | ||
| + | BAAB | ||
| + | BACA | ||
| + | CABA | ||
| + | | | ||
| + | BAABA | ||
| + | CABAA | ||
| + | AABAC | ||
| + | BACAB | ||
| + | ABAAB | ||
| + | ABACA | ||
| + | ACABA | ||
| + | | | ||
| + | AABAC | ||
| + | ABAAB | ||
| + | ABACA | ||
| + | ACABA | ||
| + | BAABA | ||
| + | BACAB | ||
| + | CABAA | ||
| + | | | ||
| + | BAABAC | ||
| + | CABAAB | ||
| + | AABACA | ||
| + | BACABA | ||
| + | ABAABA | ||
| + | ABACAB | ||
| + | ACABAA | ||
| + | | | ||
| + | AABACA | ||
| + | ABAABA | ||
| + | ABACAB | ||
| + | ACABAA | ||
| + | BAABAC | ||
| + | BACABA | ||
| + | CABAAB | ||
| + | | | ||
| + | BAABACA | ||
| + | CABAABA | ||
| + | AABACAB | ||
| + | BACABAA | ||
| + | ABAABAC | ||
| + | ABACABA | ||
| + | ACABAAB | ||
| + | | | ||
| + | AABACAB | ||
| + | ABAABAC | ||
| + | <font color="red">ABACABA</font> | ||
| + | ACABAAB | ||
| + | BAABACA | ||
| + | BACABAA | ||
| + | CABAABA | ||
| + | |- | ||
| + | |||
| + | !colspan="8"| Результат | ||
| + | |- | ||
| + | |align="center" colspan="8"| | ||
| + | <font color="red">ABACABA</font> | ||
| + | |} | ||
| + | |||
| + | |||
| + | == Ссылки == | ||
| + | *[http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%91%D0%B0%D1%80%D1%80%D0%BE%D1%83%D0%B7%D0%B0_%E2%80%94_%D0%A3%D0%B8%D0%BB%D0%B5%D1%80%D0%B0 Преобразование Барроуза — Уилера - Википедия] | ||
| + | |||
| + | *[http://www.cs.karelia.ru/~aborod/inf/2010/schedule.php.ru Преобразование Барроуза — Уилера - cs.karelia.ru] | ||
Текущая версия на 01:19, 29 октября 2010
Определение
| Определение: |
| Преобразование Барроуза — Уилера (Burrows-Wheeler transform, BWT) — это алгоритм, используемый в техниках сжатия данных для преобразования исходных данных. |
bzip2 использует преобразование Барроуза-Уилера для превращения последовательностей многократно чередующихся символов в строки одинаковых символов, затем применяет преобразование MTF (англ. move-to-front), и в конце кодирование Хаффмана.
Описание алгоритма
Преобразование выполняется в три этапа. На первом этапе составляется таблица всех циклических сдвигов входной строки. На втором этапе производится лексикографическая (в алфавитном порядке) сортировка строк таблицы. На третьем этапе в качестве выходной строки выбирается последний столбец таблицы преобразования. Следующий пример иллюстрирует описанный алгоритм:
Пусть нам дана исходная строка "ABACABA".
| Трансформация | |||
|---|---|---|---|
| Вход | Все Перестановки |
Сортировка Строк |
Выход |
ABACABA |
ABACABA BACABAA ACABAAB CABAABA ABAABAC BAABACA AABACAB |
AABACAB ABAABAC ABACABA ACABAAB BAABACA BACABAA CABAABA |
BCABAAA |
Результат вкрадце запишем так: ("BCABAAA", 3), где 3 - это номер исходной строки в отсортированной матрице, так как он может понадобиться для обратного преобразования.
Обратное преобразование
Пусть нам дано: ("BCABAAA", 3). Тогда выпишем в столбик нашу преобразованную последовательность символов "BCABAAA". Запишем её как последний столбик предыдущей матрицы (при прямом преобразовании Барроуза — Уилера), при этом все предыдущие столбцы оставляем пустыми. Далее построчно отсортируем матрицу, затем в предыдущий столбец запишем "BCABAAA". Опять построчно отсортируем матрицу. Продолжая таким образом, можно восстановить полный список всех циклических перестановок строки, которую нам надо найти. Выстроив полный отсортированный список перестановок, выберем строку с номером, который нам был изначально дан. В итоге мы получим искомую строку. Алгоритм обратного преобразования описан в таблице ниже:
| Обратное преобразование | |||||||
|---|---|---|---|---|---|---|---|
| Вход | |||||||
BCABAAA | |||||||
| Добавление 1 | Сортировка 1 | Добавление 2 | Сортировка 2 | Добавление 3 | Сортировка 3 | Добавление 4 | |
B C A B A A A |
A A A A B B C |
BA CA AA BA AB AB AC |
AA AB AB AC BA BA CA |
BAA CAB AAB BAC ABA ABA ACA |
AAB ABA ABA ACA BAA BAC CAB |
BAAB CABA AABA BACA ABAA ABAC ACAB | |
| Сортировка 4 | Добавление 5 | Сортировка 5 | Добавление 6 | Сортировка 6 | Добавление 7 | Сортировка 7 | |
AABA ABAA ABAC ACAB BAAB BACA CABA |
BAABA CABAA AABAC BACAB ABAAB ABACA ACABA |
AABAC ABAAB ABACA ACABA BAABA BACAB CABAA |
BAABAC CABAAB AABACA BACABA ABAABA ABACAB ACABAA |
AABACA ABAABA ABACAB ACABAA BAABAC BACABA CABAAB |
BAABACA CABAABA AABACAB BACABAA ABAABAC ABACABA ACABAAB |
AABACAB ABAABAC ABACABA ACABAAB BAABACA BACABAA CABAABA | |
| Результат | |||||||
ABACABA | |||||||