Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义压缩算法的效率_Java_Algorithm_Compression - Fatal编程技术网

Java 自定义压缩算法的效率

Java 自定义压缩算法的效率,java,algorithm,compression,Java,Algorithm,Compression,我有一个压缩算法的想法,我有两个问题: 我应该处理它吗?它会有效率吗 我如何优化它 这是我到目前为止创建的算法 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 < 1

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

  • 我应该处理它吗?它会有效率吗
  • 我如何优化它
  • 这是我到目前为止创建的算法

    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);
    }
    
    示例输出

    [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)次


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

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

    要发明真正的新东西,你需要检查一下,以前发明了什么。阅读一些关于数据压缩等方面的论文和书籍是一个很好的开始

    如果你只是想练习写算法,那完全可以。继续改进您的算法、重构、加速、评测等

    如果您希望您的算法实用,请再次检查之前创建的算法。开源压缩算法等值得研究

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

    最后,如果你想玩得开心,就做你想做的事,不要听任何人的。你已经发明了。大多数压缩算法已经结合了一种运行长度编码,它将在更多情况下比您的实现表现更好。所以如果我是你,我就不会追求它


    如果您对数据压缩感兴趣,我强烈建议您阅读第2章和第6章。通过将结果与现有的著名算法(如gzip)进行比较,您可以轻松检查它的效率。但是,由于在现实生活数据中,字母重复出现的情况相对较少(现有的算法已经处理了这一问题,而且效率更高),我认为这不会产生很好的结果。这种算法类似于,你可以在互联网上找到很多关于它的信息。你可以使用拼写检查器,尤其是标题。压缩在20世纪80年代很有趣。在投入大量时间之前考虑一下您的目标(并记下两者)。第一个问题是它无法处理数据中出现的0x80位。你需要设计一个逃避的惯例,不要忘记一个逃避的惯例。它只不过是运行长度编码,几十年前就已经发明了。
    [0x80, A, B, C, D, E, E, B, B, 0x8D, A, 0x84, B, 0x82, C, C] = 16 bytes