我在寻找一种算法压缩小文本字符串:50-1000字节(即网址)。 哪种算法最适合呢?
Answer 1:
退房Smaz :
Smaz适用于压缩很短串简单的压缩库。
Answer 2:
霍夫曼具有静态成本,霍夫曼表,所以我不同意这是一个不错的选择。
有适应性的版本,其做掉这个问题,但压缩率可能会受到影响。 其实,你应该问的问题是“什么算法来压缩文本字符串具有这些特征。” 举例来说,如果长时间重复预期,简单运行Lengh编码可能是不够的。 如果你能保证只有英文单词,空格,punctiation和偶尔的数字将出现,然后用霍夫曼预先定义霍夫曼表可能产生良好的效果。
一般来说,朗佩尔 - 谢夫家族的算法有很好的压缩效率和性能,以及图书馆为他们比比皆是。 我会与去。
与什么东西被压缩在网址中的资讯,那么我建议,压缩(与任何算法容易获得)之前,你编纂他们。 网址遵循定义明确的模式,它的某些部分是高度可预测的。 通过利用这方面的知识,您可以编纂的网址为更小的东西,首先,后面霍夫曼编码的想法可以在这里帮助你。
例如,翻译网址成比特流,你可以取代“HTTP”与第1位,以及其他任何与后跟实际网络协议的位“0”(或者用一个表来获取其他常见的协议,如HTTPS, FTP,文件)。 在“://”,可以完全只要你可以标记该协议的最终下降。 等去阅读有关的URL格式,并认为他们可以如何编纂采取更少的空间。
Answer 3:
我没有代码的手,但我一直很喜欢建筑规模的2D查找表256个* 256字符的方法( RFC 1978年 ,PPP预测压缩协议 )。 要压缩一个字符串你循环每个字符,并使用查找表来获得使用当前和前一个字符作为索引到表中的“预测”下一个字符。 如果有一个匹配你写一个1位,否则写0,炭和当前焦炭更新查找表。 这种方法基本上保持在数据流中的最可能的下一个字符的一个动态的(和粗)查找表。
你可以用一个归零的查找表开始,但obviosuly它的工作原理最好在很短的字符串,如果它与每个字符对最有可能的字符初始化,例如,对于英语语言。 只要初始查找表是压缩和解压缩,你不需要把它发射到压缩数据相同。
这种算法没有给出一个辉煌的压缩比,但它与内存和CPU资源节约令人难以置信,也可以在一个连续的数据流工作 - 解压缩维护其自己的查找表的副本,因为它解压缩,从而查找表调整到的数据的类型被压缩。
Answer 4:
任何算法/库支持预置字典,例如ZLIB 。
这样,您就可以主要用同一种文字很可能出现在输入压缩机。 如果文件在某种程度上是相似的(例如,所有的网址,所有的C程序,所有的StackOverflow职位,所有的ASCII艺术图),那么某些字符串将出现在大多数或所有的输入文件。
每个压缩算法将节省空间,如果在同一子在一个输入文件中重复多次(如“the”在C代码英文文本或“INT”)。
但在URL的情况下的特定字符串(如“ HTTP:// WWW 。”管理,“.com”,“ html的”,“的.aspx”通常会在每个输入文件中出现一次所以,你需要的文件之间共享。以某种方式而不是每个文件一个压缩发生。将其放置在预先设定的字典将实现这一点。
Answer 5:
如果你是在谈论实际压缩文本不只是缩短然后放气/ gzip的(约gzip的包装),压缩工作适合规模较小的文件和文本。 另外的算法是高效像的bzip2等较大的文件
维基百科有压缩时间列表。 (寻找效率的比较)
Name | Text | Binaries | Raw images
-----------+--------------+---------------+-------------
7-zip | 19% in 18.8s | 27% in 59.6s | 50% in 36.4s
bzip2 | 20% in 4.7s | 37% in 32.8s | 51% in 20.0s
rar (2.01) | 23% in 30.0s | 36% in 275.4s | 58% in 52.7s
advzip | 24% in 21.1s | 37% in 70.6s | 57& in 41.6s
gzip | 25% in 4.2s | 39% in 23.1s | 60% in 5.4s
zip | 25% in 4.3s | 39% in 23.3s | 60% in 5.7s
Answer 6:
哈夫曼编码通常这个工作好。
Answer 7:
你可能想看看标准的压缩方式对Unicode 。
SQL Server 2008 R2的内部使用它,可以实现高达50%的压缩。