2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Корректное кодирование строки
Сообщение26.12.2022, 11:26 
Сейчас экспериментирую с одним из методов оценки хаотичности строки.
Суть в том, что для достаточно длинной случайной строки $ 'aabbaccaca...'$ (с алфавитом $[a, b, c]$)
количество паттернов $[a, b, c], [aa, ab, ba, bb, ac, ca, cc, bc, cb] $ и т.д. должно быть примерно одинаковым (для каждого вида паттерна). Ну или выравниваться с ростом длины.
У метода есть свои подводные камни, но суть сейчас не в этом.

Хотелось кодировать строки бинарно, тем самым минимизируя число паттернов для анализа.
Но как это сделать корректно?! Примитивные кодировки типа $[a\to00, b\to01, c\to10]$ искажают даже относительное количество 0 и 1. "Хорошая" кодировка возможна для алфавитов длины $2^n$ , а как быть с другими?

 
 
 
 Re: Корректное кодирование строки
Сообщение26.12.2022, 12:29 
Аватара пользователя
Скажите, что ваша изначальная строка - это запись числа в троичной системе, и переведите его в двоичную.

 
 
 
 Re: Корректное кодирование строки
Сообщение26.12.2022, 20:59 
Хмм, что-то подобное предполагал, спасибо, надо пробовать!

 
 
 
 Re: Корректное кодирование строки
Сообщение26.12.2022, 22:09 
Штош, выглядит отлично! На Mathematica:
- Создаем случайную строку в троичной системе. Убеждаемся, что 3-tuples распределены достаточно равномерно:
Код:
init = RandomInteger[{0, 2}, 50000];
Multicolumn[Tally@Partition[init, 3, 1], 3, Frame -> All]


Изображение

Переводим в двоичную, смотрим на те же тройки:
Код:
data = IntegerDigits[FromDigits[init, 3], 2];
Tally@Partition[data, 3, 2]


Изображение

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group