Пусть N - количество символов во входной строке, M - количество символов в алфавите, k - номер исходной строки в матрице перестановок, s - входящая строка, count - массив для сортировки подсчетом, t - вектор обратного преобразования.
'''//считаем частоты символов''' '''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]''' '''//создаем вектор обратного преобразования''' '''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]]