首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义压缩算法的效率

自定义压缩算法的效率
EN

Stack Overflow用户
提问于 2015-10-17 15:54:21
回答 2查看 157关注 0票数 3

我有一个压缩算法的想法,我有两个问题:

  1. 要我来处理吗?它会有效率吗?
  2. 我如何优化它?

这是我到目前为止创建的算法。

代码语言:javascript
复制
int i = 0,j, diff, beginIndex = 0;
while(i < tmp.length){
    j = i;
    byte first = tmp[i];
    int total = 0;
    while(j < tmp.length && first == tmp[j] && total < 127){ j++; total++;}

    if(total > 3){
        if(beginIndex != i){
            diff = i - beginIndex;
            packed.put((byte)diff);
            packed.put(tmp, beginIndex, diff);
        }
        packed.put((byte)(0x80 | total));
        packed.put(tmp[i]);
        beginIndex = j; 
    } 

    i = j;

    if(i-beginIndex == 127){
        packed.put((byte)127);
        packed.put(tmp, beginIndex, 127);
        beginIndex = i;
    }
}

if(beginIndex < i){
    diff = i - beginIndex;
    packed.put((byte)diff);
    packed.put(tmp, beginIndex, diff);
}

示例输入(每个字母描述一个字节)

代码语言:javascript
复制
[A, B, C, D, E, E, B, B, A, A, A, A, A, A, A, A, A, A, A, A, A, B, B, B, B, C, C] = 27 bytes

示例输出

代码语言:javascript
复制
[0x80, A, B, C, D, E, E, B, B, 0x8D, A, 0x84, B, 0x82, C, C] = 16 bytes

在示例0x80中是填充位。表示是否会重复下列信函。0xFF - 0x80 = 0x7F是maksimum重复计数(127)。因此,0x8D表示以下字节将重复0xD (13)次

有没有想过优化这个算法?这是有用的,还是我应该摆脱这个想法?

EN

回答 2

Stack Overflow用户

发布于 2015-10-28 03:51:20

问题是,你的算法的目的是什么?

要发明一些真正新的东西,你需要检查一下之前发明的东西。阅读一些关于数据压缩等方面的论文和书籍。数据压缩解释可以是一个很好的起点。

如果你只想练习写算法,那是完全没有问题的。继续改进你的算法,重构,加速,分析等等。

如果您想要您的算法是实用的,再一次,检查什么是创建之前。开源压缩算法,如zlib,值得研究。

如果要检查算法与其他算法的比较方式,请在一些流行的测试(如Silesia开源压缩基准 )上运行它。这将给你的直觉,你的立场(这可能有点令人失望,但不要放弃)。

最后,如果你想玩得开心,就做你想做的事,不要听任何人的。

票数 1
EN

Stack Overflow用户

发布于 2015-10-28 04:04:38

你发明了游程编码。大多数压缩算法已经包含了一种运行长度编码,它将在更多的情况下执行您的实现并更好地工作。所以如果我是你我就不会去追求它。

如果您对数据压缩感兴趣,我强烈推荐管理G第2章和第6章作为一种非常容易阅读的读物。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33188591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档