Изменения

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

Обратное преобразование Барроуза-Уиллера

19 байт убрано, 05:27, 6 декабря 2011
Псевдокод
Пусть N — количество символов во входной строке, M — количество символов в алфавите, k — номер исходной строки в матрице перестановок, s — входящая строка, count — массив для сортировки подсчетом, t — вектор обратного преобразования, x - номер данной нам строки в таблице.
// Cчитаем частоты символов for i = 0 .. M count[i] = 0 for i = 0 .. N count[s[i]]++ // Упорядочиваем символы, чтобы получить первый столбец исходной матрицы // count[i] указывает на первую позицию символа i в первом столбце sum = 0 for i = 0 .. M sum = sum + count[i] count[i] = sum - count[i] // Cоздаем вектор обратного преобразования for i = 0 .. N t[count[s[i]]]] = i count[s[i]]++ // И восстанавливаем исходный текст j = t[x] for i = 0..N print(s[j]) j = t[j]
==См. также==
*[[Преобразование Барроуза-Уиллера]]
*[[Преобразование MTF]]
Анонимный участник

Навигация