Как измерить сложность строки? - PullRequest
8 голосов
/ 22 мая 2011

У меня есть несколько длинных строк (~ 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

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

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

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


Это то, что я закончил

1 Ответ

11 голосов
/ 22 мая 2011

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

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

...