基于统计的压缩算法:游程编码

简介: 1.游程编码概念   游程编码又称“运行长度编码”或“行程编码”,是一种统计编码,该编码属于无损压缩编码。 2.基本原理   用一个符号值和串长代替具有相同值的连续符号,使符号长度少于原始数据的长度。

1.游程编码概念

  游程编码又称“运行长度编码”或“行程编码”,是一种统计编码,该编码属于无损压缩编码。

2.基本原理

  用一个符号值和串长代替具有相同值的连续符号,使符号长度少于原始数据的长度。

  如:     原始文本:dfffffeeeeettttrrrrttttt

    游程编码后文本:d1f5e5t4r4t5

 3.代码示例

 1 #include <stdio.h>
 2 #include <string.h>
 3 int main()
 4 {
 5     char textBefore[100] ="dfffffeeeeettttrrrrttttt";
 6     char textAfter[100];
 7     memset(textAfter,0,sizeof(textAfter));
 8 
 9     char c;
10     int num,i,j;
11     for(i=0;i<strlen(textBefore);){
12         c   = textBefore[i];    ///临时保存字符
13         num = 1;    ///保存个数
14         for(j=i+1;j<strlen(textBefore);j++){
15             if(c == textBefore[j])
16                 num++;
17             else
18                 break;
19         }
20         i = j;
21 
22         sprintf(textAfter,"%s%c",textAfter,c);
23         sprintf(textAfter,"%s%d",textAfter,num);
24     }
25     printf("textBefore : %s\n",textBefore);
26     printf("textAfter  : %s\n",textAfter);
27     return  0;
28 }

代码输出:

  

 

参考:

http://zh.wikipedia.org/wiki/%E6%B8%B8%E7%A8%8B%E7%BC%96%E7%A0%81

http://baike.baidu.com/view/721796.htm?fr=aladdin

(方法简单也是有名字的)

相关文章
|
13小时前
|
算法 JavaScript Java
【状态压缩】【动态规划】【C++算法】1125.最小的必要团队
【状态压缩】【动态规划】【C++算法】1125.最小的必要团队
|
13小时前
|
算法 测试技术 C++
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
|
13小时前
|
算法 测试技术 C#
【状态压缩】【动态规划】【C++算法】691贴纸拼词
【状态压缩】【动态规划】【C++算法】691贴纸拼词
|
13小时前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
75 0
|
13小时前
|
机器学习/深度学习 人工智能 算法
【图像版权】论文阅读:CRMW 图像隐写术+压缩算法
【图像版权】论文阅读:CRMW 图像隐写术+压缩算法
8 0
|
13小时前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于有序抖动块截断编码的水印嵌入和提取算法matlab仿真
这是一个关于数字图像水印嵌入的算法介绍。使用MATLAB2022a,该算法基于DOTC,结合抖动和量化误差隐藏,确保水印的鲁棒性和隐蔽性。图像被分为N*N块,根据水印信号进行二值化处理,通过调整重建电平的奇偶性嵌入水印。水印提取是嵌入过程的逆操作,通过重建电平恢复隐藏的水印比特。提供的代码片段展示了从块处理、水印嵌入到噪声攻击模拟及水印提取的过程,还包括PSNR和NC的计算,用于评估水印在不同噪声水平下的性能。
|
13小时前
|
算法 测试技术 C++
【状态压缩】【动态规划】【C++算法】691贴纸拼词
【状态压缩】【动态规划】【C++算法】691贴纸拼词
|
13小时前
|
存储 算法
【编码狂想】LeetCode 字符串和数组篇:挑战算法精髓,深化程序设计基础
【编码狂想】LeetCode 字符串和数组篇:挑战算法精髓,深化程序设计基础
37 0
|
13小时前
|
SQL 存储 编解码
Hive中的压缩技术是如何实现的?请解释其原理和常用压缩算法。
Hive中的压缩技术是如何实现的?请解释其原理和常用压缩算法。
29 0
|
13小时前
|
存储 设计模式 算法
【数据结构和算法】压缩字符串
给你一个字符数组chars,请使用下述算法压缩: 从一个空字符串s开始。对于chars中的每组连续重复字符: 如果这一组长度为1,则将字符追加到s中。 否则,需要向s追加字符,后跟这一组的长度。 压缩后得到的字符串s不应该直接返回,需要转储到字符数组chars中。需要注意的是,如果组长度为10或10以上,则在chars数组中会被拆分为多个字符。 请在修改完输入数组后,返回该数组的新长度。
69 1