c# - 复杂度压缩字符串

标签 c# string compression complexity-theory

我有一个很大的理论字符串(长 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/

相关文章:

c# - wpf 中的可排序 WrapPanel

python - 避免重复 str.format 的参数?

android - Java代码中的硬编码字符串与@string - Android

indexing - 压缩排序的整数

swift - 如何将数据附加到压缩文件?

c# - 向 datagridView 中的某些单元格添加按钮

c# - 正则表达式在 HTML 中获取特定 TD 的内部值

c++ - 流式文件增量编码/解码

c# - 有什么是 Ruby Mixins 可以做而 C# 伪 Mixins(接口(interface) + 扩展方法)不能做的事情吗?

c - 当选项是 C 上的字符串时如何使用 getopt?