我正在寻找标准高阶函数的直接组合,通过计算重复元素来压缩列表.例如,结果为
"abbccccb"
将会 :
[(1, 'a'), (2, 'b'), (4, 'c'), (1, 'b')]
Run Code Online (Sandbox Code Playgroud)
另一个例子,结果为
(sort "abrakadabra")
Run Code Online (Sandbox Code Playgroud)
将会:
[(5, 'a'), (2, 'b'), (1, 'd'), (1, 'k'), (2, 'r')]
Run Code Online (Sandbox Code Playgroud) 我尝试用谷歌搜索算法来压缩/加密一个固定大小的字符串,从52个字符到40个字符,但似乎找不到任何字符串.
目标字符串是随机字母数字[A-Z0-9],例如"M5KS07VHN2X42JCY1PFHE1ZZGI2XUBDFAKQBEPFB7CH4SECXHJXL"
我已经尝试了huffman和smaz(https://github.com/antirez/smaz ")并且两者都膨胀到原始字符串的大小.
有没有人知道这个目的的好算法?
我正在使用ZipOutputStream来创建ZIP文件.它运行正常,但Javadoc非常稀疏,所以我对ZipOutputStream的特性提出了疑问:
支持的最大文件大小是否有限制?ZIP中包含的文件和生成的ZIP文件本身?该size论点是long,但谁知道.(我们假设文件系统没有限制.)
什么是最小输入文件大小,证明使用DEFLATED方法是正确的?
我将始终使用ZipInputStream读取生成的ZIP文件.
我正在玩ProtoBuf,试图了解预期的压缩类型.作为一个测试案例,我有一个10,000,000个十字符串的列表,我正在序列化,然后将其拆分为3.9mb块.ProtoBuf似乎做得很糟糕,最终创造了30多个块.以下是我运行的测试结果.
ProtoBuf-Net序列化:30个3.9mb块
BinaryFormatter序列化:12个3.9mb块
具有Deflate流序列化的BinaryFormatter:1个72kb块
我这样叫ProtoBuf:
ProtoBuf.Serializer.Serialize<List<string>>(names);
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
我有一个巨大的*.tar.gz文件,我想查看其中包含的文件列表而不提取内容(最好每个文件使用mtimes).我怎么能在python中实现这一点?
我正在使用Mathematica 9并导出大量列表(典型列表的尺寸为182500,4,8,42).每个文件大约有6个这样大小的列表(所有整数,不确定这是否会对列表产生影响,我知道它在其他数组类型中也是如此).保存它们是HDF5格式,但是,文件的大小相对较大(1.5 GB).
因此,我试图在Mathematica中使用GZIP压缩文件,因为他们声称它是导出函数中的一个选项,顺便说一下,它有很多错误.
在文档之后的所有尝试都没有完成后,无法找到任何帮助.我想知道我们的Mathematica爱好者是否可以提供一些技巧.
我正在研究一种基于RSA非对称算法的加密器应用程序.它生成一个密钥对,用户必须保留它.由于密钥对是长随机字符串,我想创建一个函数,让我根据模式压缩生成的长随机字符串(密钥对).
(例如,函数获取包含100个字符的字符串并返回包含30个字符的字符串)
因此,当用户输入压缩字符串时,我可以根据我压缩的模式重新生成密钥对.
但有人告诉我,压缩随机的东西是不可能的,因为它们是随机的!
你有什么想法 ?有没有办法做到这一点?
谢谢
我在反序列化字符串时遇到异常[System.Runtime.Serialization.SerializationException:在流分析结束之前遇到流结束。]请指导我该怎么做才能解决此错误。
byte[] compressed;
string content = "afjsklf lkjflfkldsflkfj fa fj lflkf lk kj lkj fldsjf lkflewru pjdslk jsdfi;j klnvmlvnetu iowu lknxvmln3-958u09v lsn";
var compMS = new MemoryStream();
using (var compressor = new GZipStream(compMS, CompressionMode.Compress))
{
new BinaryFormatter().Serialize(compressor, content);
compressed = compMS.ToArray();
}
var decompMS = new MemoryStream(compressed);
using (var decompressor = new GZipStream(decompMS, CompressionMode.Decompress))
{
BinaryFormatter bf = new BinaryFormatter();
decompMS.Position = 0;
string result = (string)bf.Deserialize(decompMS);
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用,decompMS.Seek(0, SeekOrigin.Begin);但异常仍然存在。
我有一个.sqlite 数据库:
$db = new PDO("sqlite:db.sqlite");
Run Code Online (Sandbox Code Playgroud)
它的大小是60MB。它有1张桌子。该表列中的一列(唯一的重列)保存BLOB_TEXT数据。我正在尝试压缩此列值:
$pdo = $db->query("SELECT id, house_plan FROM houses");
$houses = $pdo->fetchAll(PDO::FETCH_ASSOC);
$initial_length = 0;
$compressed_length= 0;
for ($i = 0; $i < count($houses); $i++) {
$id = $houses[$i]["id"];
$house_plan = $houses[$i]["house_plan"];
$compressed = gzcompress($house_plan);
$initial_length += strlen($house_plan);
$compressed_length += strlen($compressed);
flush();
$query = $db->prepare("UPDATE houses SET house_plan=? WHERE id=" . $id);
$query->bindParam(1, $compressed, PDO::PARAM_LOB);
$query->execute();
}
Run Code Online (Sandbox Code Playgroud)
然后打印汇总的初始BLOB_TEXT数据长度和压缩数据长度(替换了表中的初始数据):
echo "Before: " . $initial_length . ", …Run Code Online (Sandbox Code Playgroud) 我需要为压缩和解压缩ArraySegment对象的方法编写单元测试.这些方法中有很多奇怪的处理方法,我不需要理解.(他们也使用一些系统方法 - 我不知道他们的实现.)
问题在于如何实际测试这些东西.我可以检查具体输入的压缩方法的结果是什么Lorem ipsum dolor sit amet, consectetur adipisicing elit.- 并根据此实验创建一个测试用例,但此解决方案不测试任何边界情况.
我还可以测试在某些序列上进行压缩然后解压缩是否给出了第一个输入序列,但这不是纯粹的单元测试.
你遇到过这样的问题吗?它有什么好的解决方案吗?
compression ×10
c# ×4
.net ×3
blob ×1
c++ ×1
export ×1
extraction ×1
gzip ×1
gzipstream ×1
haskell ×1
hdf5 ×1
java ×1
php ×1
protobuf-net ×1
python ×1
sqlite ×1
stream ×1
string ×1
testcase ×1
testing ×1
unit-testing ×1
zip ×1