zoukankan      html  css  js  c++  java
  • 二值游程编码

    游程编码是对数据压缩的一种方式,这写了一个简单的二值游程编码程序,程序功能如:原始输入:0001110011010100001100 ,压缩之后输出:33221111422

    也就是相当于记录每个值连续出现的次数,作为编码值。

    #include <iostream>
    #include <string>
    #include <vector>
    #include <queue>
    #include <iterator>
    using namespace std;
    
    int main()
    {
        string str("0001110011010100001100");
        queue<int> qu;
        vector<int> vec;
        //cin >> str;
        int len = str.length();
        int i = 0;
        while(len--)
        {
            qu.push(str[i++] - '0');
        }
        int a = qu.front();
        qu.pop();
        i = 1;
        while(!qu.empty())
        {
            if(a == qu.front())
            {
                i++;
                a = qu.front();
                qu.pop();
                //cout<<a;
            }
            else
            {
                vec.push_back(i);
                i = 1;
                a = qu.front();
                qu.pop();
                //cout<<a;
            }
        }
        vec.push_back(i);//一开始的时候这没有写,少了最后一项
        copy(vec.begin(),vec.end(),ostream_iterator<int>(cout,""));
        cout<<endl;
    
    }

    说明:这里简单的使用二值游程编码,当然也可以是字符进行类似编码,只需queue<char> 就行了。

  • 相关阅读:
    51nod1376 最长递增子序列的数量
    51nod1201 整数划分
    51nod1202 子序列个数
    51nod 博弈论水题
    51nod1052 最大M子段和
    51nod1678 lyk与gcd
    51nod1262 扔球
    BZOJ2763, 最短路
    吃西瓜 最大子矩阵 三维的。 rqnoj93
    noip2015 信息传递 强连通块
  • 原文地址:https://www.cnblogs.com/zhuyp1015/p/2566446.html
Copyright © 2011-2022 走看看