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

C 编程新手:如何编程我自己的数据压缩算法?,c,algorithm,compression,C,Algorithm,Compression,现在是夏天,所以我决定自己写一个数据压缩程序,最好用C代码。我对压缩的工作原理有一个不错的初学者理解。我只有几个问题: 1) c语言是完成这项任务的合适编程语言吗? 2) 我应该用字节处理输入文件吗?还是在二进制级别 如果有人能给我一个正确的方向,我会非常感激。然而,我想自己编写代码,而不是使用预先存在的压缩库或类似的东西 1) c是完成这项任务的合适编程语言吗 对 2) 我应该用字节处理输入文件吗?还是在二进制级别 他们是一样的,所以这个问题毫无意义 不使用预先存在的压缩库 您可以使用预先存在

现在是夏天,所以我决定自己写一个数据压缩程序,最好用C代码。我对压缩的工作原理有一个不错的初学者理解。我只有几个问题:

1) c语言是完成这项任务的合适编程语言吗?
2) 我应该用字节处理输入文件吗?还是在二进制级别

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

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

2) 我应该用字节处理输入文件吗?还是在二进制级别

他们是一样的,所以这个问题毫无意义

不使用预先存在的压缩库

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

  • C是编写压缩程序的最佳选择。不过,你也可以使用很多其他语言

  • 您的计算机可能无法直接寻址小于一个字节的内存单元(基本上根据定义),因此使用字节可能是一个不错的选择。您使用数据的某些方式将受到您选择的压缩算法的影响


  • 祝你好运

    你可以先看看。许多计算机科学将其作为一个项目来实施,因此它应该是可管理的。C适合于赫夫曼编码,但是在高级语言中更容易做到这一点,以便理解这些概念。宾夕法尼亚大学的硕士级项目中有幻灯片、提示和java项目示例(搜索页面上的“Huff'”)。
  • 是的,C非常适合这种工作

  • 使用字节还是位取决于您决定实现的算法。例如,哈夫曼编码本质上是面向比特的,而许多其他压缩算法则不是


  • 回答您的问题:

  • C是合适的
  • 这取决于算法,或者您对“压缩”的思考方式
  • 我的意见是,首先决定是要进行
    无损压缩
    还是
    有损压缩
    ,然后选择一种算法来实现。以下是几点建议:

    对于无损编码,有些是非常直观的,例如
    运行长度
    编码, e、 例如,如果有11个
    a
    s和5个
    b
    s,您只需将它们编码为
    11a5b
    。 有些算法使用
    字典
    ,请参阅
    LZW编码
    。 最后,我推荐
    Huffman
    编码,因为它非常直接、简单,并且有助于获得学习算法的经验(出于教育目的)

    对于有损图像,JPEG压缩中使用了离散傅里叶变换(DFT),或小波。这有助于理解多媒体压缩


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

    @Doug chamberlain它既有趣又有教育意义。这有什么问题?看看哈夫曼编码的算法。这应该是一个很好的示例算法,可以帮助您入门。我指的是使用字节,而不是在较低的级别上管理较小的比特组。我读过关于哈夫曼压缩的书,除非我理解错误,否则它似乎可以处理单个位。@araisbec:位总是被收集到字节中。没有比字节更细粒度的了。您的算法可能正在处理位;但它是通过访问、修改和存储整个字节值的位来实现的。