Как измерить сложность строки?

У меня есть несколько длинных строк (~ 1 000 000 символов). Каждая строка содержит символы только из определенного алфавита, например

A = {1,2,3}

Примеры строк

string S1 = "1111111111 ..."; //[meta complexity] = 0
string S2 = "1111222333 ..."; //[meta complexity] = 10
string S3 = "1213323133 ..."; //[meta complexity] = 100

Вопрос. Какие меры можно использовать для количественной оценки сложности этих строк? Я вижу, что S1 менее сложен, чем S3, но как я могу сделать это программно из .NET? Будем очень признательны за любой алгоритм или ссылку на инструмент/литературу.

Редактировать

Я попробовал энтропию Шеннона, но оказалось, что она мне не особо полезна. У меня будет одинаковое значение H для этих последовательностей AAABBBCCC и ABCABCABC и ACCCBABAB и BBACCABAC. сильный>


Вот что я в итоге сделал


person oleksii    schedule 21.05.2011    source источник
comment
Вы имеете в виду энтропию?   -  person hammar    schedule 22.05.2011
comment
Я попробовал это, но оказалось, что это не очень полезно для меня. У меня будет одинаковое значение H для этих последовательностей AAABBBCCC и ABCABCABC и ACCCBABAB и BBACCABAC   -  person oleksii    schedule 22.05.2011
comment
в дополнение к комментарию hammar - вы имеете в виду энтропию Маркова вместо энтропии Шеннона? (та же ссылка в википедии)   -  person Premature Optimization    schedule 22.05.2011
comment
@ user759588 @hammar спасибо за предложения, но ни скорость Шеннона, ни скорость Маркова (энтропия) не являются для меня достаточно хорошими показателями.   -  person oleksii    schedule 22.05.2011
comment
Я думаю, что вы можете найти ответ на свой вопрос, прочитав: en.wikipedia.org/wiki/Kolmogorov_complexity   -  person Belgi    schedule 10.02.2012
comment
Спасибо за ответ. Я рассматривал KC как первую меру, но она невычислима, т.е. для общего случая невозможно вычислить сложность произвольной строки из-за проблемы остановки (никогда не знаешь, правильное ли твое решение, поэтому останови программа =› программа никогда не перестанет искать лучшие решения)   -  person oleksii    schedule 10.02.2012


Ответы (1)


Сжатие строк с использованием стандартных методов, таких как zip, дает хорошее представление о сложности.

Хорошая степень сжатия снижает сложность
Плохая степень сжатия повышает сложность

person aioobe    schedule 21.05.2011
comment
@ user759588, конечно. Шаг 1: Заархивируйте строку. Шаг 2: Верните размер заархивированного файла, разделенный на исходный размер. - person aioobe; 22.05.2011
comment
@aioobe, правда? Ваш шаг 1 больше похож на путешествие через Тихий океан, не так ли? (метафора охватывает как расстояние, так и расходы) - person Premature Optimization; 22.05.2011
comment
Вы говорите, что это слишком сложно? Затем скажите это (и прочитайте, что такое алгоритм). - person aioobe; 22.05.2011
comment
@aioobe, я говорю, что это значительная трата ресурсов и совершенно непрозрачно. Я говорю, что это слишком грубо. - person Premature Optimization; 22.05.2011
comment
Возьмите его за отправную точку. Прочтите об алгоритмах сжатия и изучите детали, относящиеся к этой проблеме. Следует отметить, что это сложная и каверзная проблема. - person aioobe; 22.05.2011
comment
@aioobe @user759588 Мне очень нравится такой подход. Это правильный алгоритм, и он не является грубым. Это уже проверено в физике, и на самом деле я уже реализовал это для себя, но мне было интересно, какие будут другие предложения. Тем не менее, ваш ответ на 100% правильный. - person oleksii; 22.05.2011
comment
+1 это алгоритм и довольно умный! Если это слишком медленно, попробуйте использовать FastLZ или что-то подобное. Или вы сначала сжимаете ist с помощью RLE, и если результат небольшой, то его низкая сложность. Если нет, застегните его. Если заархивированный размер небольшой, его средняя сложность, и если zip ничего не может сделать с размером, это высокая сложность. - person sl0815; 22.05.2011
comment
@aioobe Теоретически это кажется необоснованным. В зависимости от алгоритма сжатия степень сжатия уже не связана с энтропией строки? Если энтропия строки не является допустимой мерой сложности, то почему приближение первого порядка к энтропии может быть хорошим? Кажется глупым. - person Patrick87; 11.02.2012
comment
@oleksii Теоретически это кажется необоснованным. В зависимости от алгоритма сжатия степень сжатия уже не связана с энтропией строки? Если энтропия строки не является допустимой мерой сложности, то почему приближение первого порядка к энтропии может быть хорошим? Кажется глупым. - person Patrick87; 11.02.2012
comment
@Patrick87 сжатие строки является допустимым приближением колмогоровской сложности. См. Keogh EJ, Lonardi S, Ratanamahatana C(Ann) (2004) На пути к интеллектуальному анализу данных без параметров. В: Конференция KDD, Сиэтл, Вашингтон, стр. 206–215 и Об анализе данных, сжатии и колмогоровской сложности. - person oleksii; 11.02.2012