【问题标题】:Programming novice: How to program my own data compression algorithm?编程新手:如何编写自己的数据压缩算法?
【发布时间】:2011-05-24 17:10:22
【问题描述】:

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

1) c 是否适合完成这项任务?
2)我应该在输入文件中使用字节吗?或者以某种方式在二进制级别?

如果有人能在正确的方向上轻推我,我将不胜感激。但是,我想自己编写代码,而不是使用预先存在的压缩库或类似的东西。

【问题讨论】:

  • @Doug Chamberlain 这很有趣,也很有教育意义。这有什么问题?
  • 看看哈夫曼编码算法en.wikipedia.org/wiki/Huffman_coding这应该是一个很好的示例算法,可以帮助您入门。

标签: c algorithm compression


【解决方案1】:

您可以先查看Huffman Encoding。许多计算机科学classes 将其作为一个项目实施,因此它应该是可管理的。 C 适合 Huffman 编码,但首先使用高级语言可能更容易,以便您理解概念。有幻灯片、提示和 Java 中的示例项目available 用于大师级宾夕法尼亚大学的项目(在该页面上搜索“huff”)。

【讨论】:

    【解决方案2】:

    回答您的问题:

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

    我的意见是,首先决定是要执行lossless compression 还是lossy compression,然后选择一个算法来实现。这里有几点建议:

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

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

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

    【讨论】:

      【解决方案3】:
      1. 是的,C 非常适合这种工作。

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

      【讨论】:

        【解决方案4】:
        1. C 是编写压缩程序的绝佳选择。不过,您也可以使用许多其他语言。

        2. 您的计算机可能无法直接寻址小于一个字节的内存单元(几乎按照定义),因此使用字节可能是一个不错的选择。您处理数据的某些方式会受到您选择的压缩算法的影响。

        祝你好运!

        【讨论】:

          【解决方案5】:

          1) c 是否适合完成这项任务?

          是的。

          2) 我应该在输入文件中使用字节吗?或者以某种方式在二进制级别?

          他们是一样的,所以这个问题没有意义。

          不使用预先存在的压缩库

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

          【讨论】:

          • 我指的是使用字节,而不是在较低级别以某种方式管理较小的位组。我已经阅读了有关霍夫曼压缩的信息,除非我理解错误,否则它似乎可以与单个位一起使用。
          • @araisbec:位总是被收集成字节。没有比字节更细粒度的了。您的算法可能正在操纵位;但它通过访问、修改和存储整个字节的比特来做到这一点。
          猜你喜欢
          • 1970-01-01
          • 2010-09-28
          • 1970-01-01
          • 1970-01-01
          • 2011-12-13
          • 2017-06-14
          • 1970-01-01
          • 2010-09-29
          • 2011-02-22
          相关资源
          最近更新 更多