gpt4 book ai didi

java - 自定义压缩算法的效率

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:24:11 25 4
gpt4 key购买 nike

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

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

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

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);
}

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

[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

示例输出

[0x80, A, B, C, D, E, E, B, B, 0x8D, A, 0x84, B, 0x82, C, C] = 16 bytes

在示例中,0x80 是打包位。表示是否重复后面的字母。 0xFF - 0x80 = 0x7F 是最大重复计数 (127)。所以,0x8D表示后面的字节会重复0xD(13)次

有优化该算法的想法吗?它会有用还是我应该放弃这个想法?

最佳答案

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

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

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

如果您希望您的算法实用,请再次检查之前创建的内容。开源压缩算法,例如zlib值得学习。

如果您想检查您的算法与其他算法相比如何,请在一些流行的测试中运行它,例如 Silesia Open Source Compression Benchmark .这会给你一个直觉你的立场(这可能有点令人失望,但不要放弃)。

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

关于java - 自定义压缩算法的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33188591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com