C 编程新手:如何编程我自己的数据压缩算法?
现在是夏天,所以我决定自己写一个数据压缩程序,最好用C代码。我对压缩的工作原理有一个不错的初学者理解。我只有几个问题: 1) c语言是完成这项任务的合适编程语言吗?C 编程新手:如何编程我自己的数据压缩算法?,c,algorithm,compression,C,Algorithm,Compression,现在是夏天,所以我决定自己写一个数据压缩程序,最好用C代码。我对压缩的工作原理有一个不错的初学者理解。我只有几个问题: 1) c语言是完成这项任务的合适编程语言吗? 2) 我应该用字节处理输入文件吗?还是在二进制级别 如果有人能给我一个正确的方向,我会非常感激。然而,我想自己编写代码,而不是使用预先存在的压缩库或类似的东西 1) c是完成这项任务的合适编程语言吗 对 2) 我应该用字节处理输入文件吗?还是在二进制级别 他们是一样的,所以这个问题毫无意义 不使用预先存在的压缩库 您可以使用预先存在
2) 我应该用字节处理输入文件吗?还是在二进制级别 如果有人能给我一个正确的方向,我会非常感激。然而,我想自己编写代码,而不是使用预先存在的压缩库或类似的东西 1) c是完成这项任务的合适编程语言吗 对 2) 我应该用字节处理输入文件吗?还是在二进制级别 他们是一样的,所以这个问题毫无意义 不使用预先存在的压缩库 您可以使用预先存在的压缩算法吗?有几十种“压缩算法”——当与谷歌一起使用时——将揭示大量有用的信息
祝你好运 你可以先看看。许多计算机科学将其作为一个项目来实施,因此它应该是可管理的。C适合于赫夫曼编码,但是在高级语言中更容易做到这一点,以便理解这些概念。宾夕法尼亚大学的硕士级项目中有幻灯片、提示和java项目示例(搜索页面上的“Huff'”)。
回答您的问题:
无损压缩
还是有损压缩
,然后选择一种算法来实现。以下是几点建议:
对于无损编码,有些是非常直观的,例如运行长度
编码,
e、 例如,如果有11个a
s和5个b
s,您只需将它们编码为11a5b
。
有些算法使用字典
,请参阅LZW编码
。
最后,我推荐Huffman
编码,因为它非常直接、简单,并且有助于获得学习算法的经验(出于教育目的)
对于有损图像,JPEG压缩中使用了离散傅里叶变换(DFT),或小波。这有助于理解多媒体压缩
维基百科是一个很好的起点。@Doug chamberlain它既有趣又有教育意义。这有什么问题?看看哈夫曼编码的算法。这应该是一个很好的示例算法,可以帮助您入门。我指的是使用字节,而不是在较低的级别上管理较小的比特组。我读过关于哈夫曼压缩的书,除非我理解错误,否则它似乎可以处理单个位。@araisbec:位总是被收集到字节中。没有比字节更细粒度的了。您的算法可能正在处理位;但它是通过访问、修改和存储整个字节值的位来实现的。