如何衡量字符串的复杂性?

ole*_*sii 9 .net string algorithm complexity-theory approximation

我有一些长串(约1.000.000个字符).例如,每个字符串仅包含来自定义的字母表的符号

A = {1,2,3}
Run Code Online (Sandbox Code Playgroud)

示例字符串

string S1 = "1111111111 ..."; //[meta complexity] = 0
string S2 = "1111222333 ..."; //[meta complexity] = 10
string S3 = "1213323133 ..."; //[meta complexity] = 100
Run Code Online (Sandbox Code Playgroud)

问:我可以使用哪种措施来量化这些字符串的复杂性?我可以看到S1没有S3那么复杂,但我怎么能以编程方式从.NET做到这一点?任何算法或指向工具/文献将非常感激.

编辑

我试过Shannon熵,但事实证明它对我来说并不是真的有用.我将对这些序列AAABBBCCCABCABCABC以及ACCCBABABBBACCABAC具有相同的H


这就是我最终做的事情

aio*_*obe 12

使用诸如zip之类的标准技术压缩字符串可以很好地指示复杂性.

压缩率好≈低复杂度
压缩率差≈更高的复杂度

  • @ user759588,确定是.步骤1:压缩字符串,步骤2:返回拉链尺寸除以原始尺寸. (4认同)
  • +1这是一个算法而且相当聪明!如果它太慢,请尝试使用FastLZ或类似的东西.或者首先使用RLE压缩ist,如果输出较小,那么其复杂度较低.如果没有,请拉链.如果拉链尺寸小,其中等复杂性,如果拉链不能对尺寸做任何事情,那么它的复杂性很高. (2认同)
  • @ Patrick87压缩字符串是Kolmogorov复杂度的有效近似值.参见"Keogh EJ,Lonardi S,Ratanamahatana C(Ann)(2004)走向无参数数据挖掘.在:KDD会议,西雅图,华盛顿州,第206-215页"和[关于数据挖掘,压缩和Kolmogorov复杂性]( http://www.springerlink.com/content/1536t57kk558606r/) (2认同)