社区
C#
帖子详情
求压缩算法
FBI_NET
2004-11-02 12:56:31
将0-9、A-Z组成的40位字符串压成20位的字符串。
按我个人的思路就是将36进制转成更高的进制,不知道有没有更好的办法??
...全文
207
17
打赏
收藏
求压缩算法
将0-9、A-Z组成的40位字符串压成20位的字符串。 按我个人的思路就是将36进制转成更高的进制,不知道有没有更好的办法??
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
FBI_NET
2004-11-04
打赏
举报
回复
谢谢大家!
AhBian
2004-11-03
打赏
举报
回复
ZIP 压缩算法中,霍夫曼算法是很重要的。
利用霍夫曼算法编码时,就是用最短的编码表示最频繁的字符,较少出现的可以使用较长的编码,这就是不等宽编码的原理。
数据结构的教科书中,对霍夫曼算法有详细的介绍。
这是典型的计算数学,但不是广义上的数学,数学太博大了。
长江
2004-11-03
打赏
举报
回复
佩服!!
哈哈007哈
2004-11-03
打赏
举报
回复
up
FBI_NET
2004-11-03
打赏
举报
回复
TO:triout(笨牛)
老大,太佩服你了,今天我终于明白,原来数学是这么的博大精深,又一次后悔当初没学好数学~~
太感谢 triout(笨牛) 前辈了,看来我要补补数学才行:)
思路是有点想通了,我试试看能不能写出代码,多谢前辈指点:)
triout
2004-11-03
打赏
举报
回复
回复人: FBI_NET(FBI) ( ) 信誉:100 2004-11-02 14:11:00 得分: 0
我想了半天,也想不明白同样几个数字怎么可能用来表示出更简洁的数据,
比如0-9表示了10进制,所有的组合已经存在了,那怎么还能用这些字符表示出相等关系的位数更少的数据呢?想不明白~
你说想不明白,其实很简单,这就是一个编码的问题。
我前面说的3种编码、64进制等说法是:
你40个字符(0-9,A-Z)中,每个字符需要一个字节(8个二进制位)表示,总共需要320个二进制位,这是使用了标准的ASCII编码方式,如果我们不用这个编码方式,而使用自己的编码方式,比如对这36个字符分别用0-35来标识他们,这样,每个字符最多只要6个二进制位就可以识别了,然后把这40个字符的6个二进制位进行排列是240个二进制位,转换为标准的字节数据是30个字节,相比原来的40个字节就减少了,不过在解码的时候就需要自己写代码来识别这些字符了,同时还需要一张映射表,来说明某个编号对应的究竟是哪个字符。
而使用我后面讲的非等宽编码,原理基本一样
triout
2004-11-03
打赏
举报
回复
我说的冲突是指在实际操作中,由用户识别数字0和字母O的时候以及识别数字2和字母Z的时候,甚至数字1和小写字母l的时候都会出现难以区分究竟是数字还是字母的问题,并不是说他们在计算机中会有冲突,这是我在工作中经常遇到用户咨询的问题。
所以,我建议如果必要把这些字符都剔除,就只有32个字符了,用32进制刚好50%的压缩率
FBI_NET
2004-11-02
打赏
举报
回复
我想了半天,也想不明白同样几个数字怎么可能用来表示出更简洁的数据,
比如0-9表示了10进制,所有的组合已经存在了,那怎么还能用这些字符表示出相等关系的位数更少的数据呢?想不明白~
FBI_NET
2004-11-02
打赏
举报
回复
TO: triout(笨牛)
老大,你说的逐位取数好复杂,我看不明白,还有,数字0和字母O有冲突,数字2和字母Z有冲突,我不明白他们为什么有冲突,能说明白点吗?
谢谢 triout(笨牛)
谢谢大家:)
jimh
2004-11-02
打赏
举报
回复
如果你的数字跟字符是有一定规律的,那使用一套有效的编码可以压缩到一半一下,如果只是简单使用64位编码,那只有75%的效率
Alden
2004-11-02
打赏
举报
回复
UP
triout
2004-11-02
打赏
举报
回复
最好的办法就是使用32进制简单实现,达到50%的压缩率,但要求你把其中的部分字符剔除掉,比如:数字0和字母O有冲突,数字2和字母Z有冲突,这样把这4个字符都剔除就OK了。
triout
2004-11-02
打赏
举报
回复
所以,你可以针对你产生的40个字符进行分析,看哪些字符出现的频率高,然后进行适当的分配其的编码长度,才能得到最优解。
triout
2004-11-02
打赏
举报
回复
上面提到的3个压缩算法中,每个的最坏压缩率都是75%,最好的压缩率分别是:
62.5%
50%
37.5%
triout
2004-11-02
打赏
举报
回复
同意1楼的,用64进制来处理最简单,但只有75%的压缩率,达不到你要求的50%
一个比较复杂的算法是:
逐位取数,如果是1,则后面5位是数据(A-Z),如果是0,则后面4位为数据(0-9),这样,压缩率会稍有提高,理论为:71.53%。
另外的一个变通是:
逐位取数,如果是1,则后面5位是数字(A-Z、8、9),如果是0,则后面3位是数字(0-7),压缩率又有所提高,理论为:69.44%。
或者:
逐位取数,如果是1,则后面5位是数字(A-Z、4-9),如果是0,则后面2位是数字(0-3),理论压缩率为:70.83%。
如果要达到50%的压缩率,除非使用其他的压缩算法了,比如在上面压缩的基础上进一步压缩或直接对40个字符进行压缩。
trnbo
2004-11-02
打赏
举报
回复
同意64位,^_^
zhouyong2052
2004-11-02
打赏
举报
回复
36进制效率低,64进制吧!
数据
压缩算法
—2无损
压缩算法
几个常见的编码算法 (一) 字典算法 字典算法是最为简单的
压缩算法
之一。它是把文本中出现频率比较多的单词或词汇组合做成一个对应的字典列表,并用特殊代码来表示这个单词或词汇。例如: 有字典列表: 00=Chinese 01=People 02=China 源文本:I am a Chinese people,I am from China 压缩后的编码为:I am a 00 0...
JPEGLS图像
压缩算法
的FPGA实现(一)
压缩算法
绪论 JPEG-LS是在ISO/ITU的新标准中用于对静态连续色调图像进行无损或进无损压缩的一种算法。它不是JPEG的一个简单扩充或修正,是一种新的压缩方法。支持无损和近无损图像压缩,不使用离散余弦变换,也不使用算术编码,仅在近无损压缩模式下有限地使用量化。。该算法具有实现复杂度低,保真度高等特点,本文就JPEG-LS的核心算法LOCO-I以及其编码流程进行详细的分析和研究。 1.
压缩算法
简介与评估 1.1
压缩算法
简介 无损压缩就是指经过压缩并重建后的图像和原图像完全一样,没有任何损失。如果重建图像和原图
基于哈夫曼树的
压缩算法
本文深入探讨了哈夫曼算法的基本原理,并通过实例展示了算法的具体实现过来。基于哈夫曼树
压缩算法
一种用于数据压缩的贪心算法,它通过构建哈夫曼树来为字符分配最优的变长编码。哈夫曼树的构建基于字符出现的频率,将频率高的字符赋予较短的编码,而频率低的字符赋予较长的编码,以此达到减少数据编码总长度的目的。文章通过一个具体实例,展示了如何根据字符频率构建哈夫曼树,并为每个字符生成相应的哈夫曼编码。
Java- 哈夫曼(Huffman)
压缩算法
哈夫曼
压缩算法
Huffman树Huffman编码算法算法分析代码实现 Huffman树 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近(频率越高的结点离根越进)。 如:int a[] = {0,1,2,3,4,5,6,7,8} 我们可以发现以下规律: 1:9个数构成的哈夫曼树一共有17个结点,也就是可以n个数可以生产2*n-1个结点 2:数字越大的数离根节点越近,越小的数离
C#
111,097
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章