编程新手:如何编写自己的数据压缩算法?

ara*_*bec 13 c compression algorithm

这是夏天,所以我决定自己编写一个数据压缩程序,最好是用C代码编写.我有一个不错的初学者了解压缩是如何工作的.我只是有几个问题:

1)c是一种合适的编程语言来完成这项任务吗?
2)我应该在输入文件的字节中工作吗?或者以某种方式在二进制级别?

如果有人能给我一个正确方向的推动,我真的很感激.我想自己编写代码,而不是使用预先存在的压缩库或类似的东西.

Iva*_*Siu 7

回答您的问题:

  1. C是合适的。
  2. 这取决于算法,或您考虑“压缩”的方式。

我的意见是,首先决定你想要做 alossless compression还是 a lossy compression,然后选择一个算法来实现。这里有一些提示:

对于无损的,有些是非常直观的,比如run-length编码,例如,如果有a11s和5s b,你只需将它们编码为11a5b。一些算法使用a dictionary,请参考LZW encoding。最后,我确实推荐Huffman编码,因为它非常直接、简单且有助于获得学习算法的经验(用于您的教育目的)。

对于有损的,Discrete Fourier Transform (DFT)wavelet用于 JPEG 压缩。这对于理解多媒体压缩很有用。

维基百科页面是一个很好的起点。


Bri*_*tle 6

你可以先看一下Huffman Encoding.许多计算机科学课程将其作为一个项目来实现,因此它应该是可管理的.C适用于霍夫曼编码,但可能更容易在更高级别的语言中进行,以便您理解这些概念.有Java的幻灯片,提示和示例项目用于主要级别的项目.宾夕法尼亚大学(在该页面上搜索"怒气冲冲").


S.L*_*ott 2

1)c 是完成这项任务的合适编程语言吗?

是的。

2)我应该以字节的形式处理输入文件吗?或者以某种方式在二进制级别?

它们是相同的,所以这个问题没有意义。

不使用预先存在的压缩库

您可以使用预先存在的压缩算法吗?有数十种“压缩算法”——当与谷歌一起使用时——将揭示大量有用的信息。

  • @araisbec:位总是被收集成字节。没有什么比字节更细粒度的了。你的算法可能会操纵位;但它是通过访问、修改和存储整个字节的位来实现这一点的。 (3认同)