一个数据压缩算法

  • 从数据中均匀地提取一组数据,有一个比较经典的算法
  • 以前在做数据抽取时非常地熟练
  • 今天再次使用时,居然忘了怎样实现了,主要是理不清求余和求商间的使用关系了
  • 简单推导一下
    • 总共s个数,均匀地分成n组,每组有g个,余数为 m
    • 即:s = g*n + m
    • 那么每输出一组 就 累计一次 n,则 总共累计数值 为 n * m
    • 所以,可以指定如下的规则:
      • 每输出一组后,累计一次m
      • 当m大于或等于n是,回滚一次n,而且当前组数量为g+1
      • 由于是从0开始累计的,所以第一组的数量一定为 g
      • 这样总共可以回滚m次
      • m就是余数
//! now for compress
    int rad, rem;

    rad = inLen / maxOutLen;
    rem = inLen % maxOutLen;

    //! now for compress
    int acc = 0;
    int outIndex = 0;
    for ( int i = 0; i < maxOutLen; i++, outIndex += rad )
    {

        pOut[ i ] = pIn[ outIndex * skipI ];

        acc += rem;
        if ( acc >= maxOutLen )
        {
            acc -= maxOutLen;
            outIndex++;
        }
    }

你可能感兴趣的:(一个数据压缩算法)