我有一个很大的理论字符串(长 104 个字符)数据库生成程序,它返回以 PB 为单位的结果。我没有那么多的计算能力,所以我想从数据库中过滤出低复杂度的字符串。
我的语法是英文字母表的修改形式,没有数字字符。我读到了 Kolmogorov Complexity它是怎样的theoretically impossible to calculate但我只需要使用压缩的 C# 中的一些基本知识。
使用这两个链接
我想到了这个:
MemoryStream ms = new MemoryStream();
GZipStream gzip2 = new GZipStream(ms, CompressionMode.Compress, true);
byte[] raw = Encoding.UTF8.GetBytes(element);
gzip2.Write(raw, 0, raw.Length);
gzip2.Close();
byte[] zipped = ms.ToArray(); // as a BLOB
string smallstring = Convert.ToString(zipped); // as a string
// store zipped or base64
byte[] raw2 = Encoding.UTF8.GetBytes(smallstring);
int startsize = raw.Length;
int finishsize = raw2.Length;
double percent = Convert.ToDouble(finishsize) / Convert.ToDouble(startsize);
if (percent > .75)
{
///output
}
我的第一个元素是:
HHHFHHFFHHFHHFFHHFHHHFHAAAAHHHFHHFFHHFHHFFHHFHHHFHAAAAHHHFHHFFHHFHHFFHHFHHHFHAAAAHHHFHHFFHHFHHFFHHFHHHFH
它压缩到 13 个字符的完成大小,但是这个其他聊天集
mlcllltlgvalvcgvpamdipqtkqdlelpklagtwhsmamatnnislmatlkaplrvhitsllptpednleivlhrwennscvekkvlgektenpkkfkinytvaneatlldtdydnflflclqdtttpiqsmmcqylarvlveddeimqgfirafrplprhlwylldlkqmeepcrf
也评估为 13。有一个错误,但我不知道如何修复它。
最佳答案
您的错误是以下将数组转换为字符串的部分:
byte[] zipped = ms.ToArray(); // as a BLOB
string smallstring = Convert.ToString(zipped); // as a string
// store zipped or base64
byte[] raw2 = Encoding.UTF8.GetBytes(smallstring);
在数组上调用 Convert.ToString()
将返回一些调试输出,在本例中为字符串 System.Byte[]
。 (参见 ideone 上的以下示例。)
您应该直接比较未压缩和压缩字节数组的长度:
int startsize = raw.Length;
int finishsize = zipped.Length;
关于c# - 复杂度压缩字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12115131/