行程编码压缩算法

行程编码压缩算法1 算法说明 RLE Run Length Encoding 行程编码 算法是一个简单高效的无损数据压缩算法 其基本思路是把数据看成一个线性序列 而这些数据序列组织方式分成两种情况 一种是连续的重复数据块 另一种是连续的不重复数据块 对于连续的重复数据快采用的压缩策略是用一个字节

大家好,我是讯享网,很高兴认识大家。

1. 算法说明

RLE(Run Length Encoding行程编码)算法是一个简单高效的无损数据压缩算法,其基本思路是把数据看成一个线性序列,而这些数据序列组织方式分成两种情况:一种是连续的重复数据块,另一种是连续的不重复数据块。对于连续的重复数据快采用的压缩策略是用一个字节(我们称之为数据重数属性)表示数据块重复的次数,然后在这个数据重数属性字节后面存储对应的数据字节本身,例如某一个文件中有如下的数据序列AAAAA,在未压缩之前占用5个字节,而如果使用了压缩之后就变成了5A,只占用两个字节,对于连续不重复的数据序列,表示方法和连续的重复数据块序列的表示方法一样,只不过前面的数据重数属性字节的内容为1。一般的这里的数据块取一个字节,这篇文章中数据块都默认为一个字节。具体来讲,字符串的编码规则如下:在字符串中,2~9个相同的字符组成的子字符串用2个字符来编码表示。第1个字符是这一字符串的长度,为2~9。第2个字符是相同字符的值。如果一个字符串存在相同字符且多于9个的子串,就先对前9个字符进行编码,然后对其余相同字符组成的子串采用相同方法进行编码。例如AAAAAABCCCC编码为6A1B14C。在字符串中,如果存在某个子串,其中没有一个字符连续重复出现,就表示为以字符1开始,后面跟着这一子串,再以字符结束。如果在字符串中存在只有1个字符1出现的子串,则以两个字符1作为输出,例如12344编码为。
Input
输入一个字符串。
Output
输出RLE编码后的字符串。
Sample Input
AAAAAABCCCC12344
Sample Output
6A1B14C


讯享网

2. 函数实现

#include <stdio.h> #include <string.h> int main() { char str[1024] = { 
  
    
  '\0'}; char result[1024] = { 
  
    
  '\0'}; int number[1024] = { 
  
    
  0}; scanf("%s", str); int i; char c = '\0'; int flag =0; int nums = 1; int j=0, k=0; for (i=0; i<strlen(str); i++) { if (str[i] == str[i+1]) //前后两者相同 { if (nums==9) //当前达到9 { result[j++] = str[i]; number[k++] = nums; nums = 0; } nums ++; } else { result[j++] = str[i]; number[k++] = nums; nums = 1; } } for (i=0; i<j; i++) { if (number[i]!=1) { if (flag==1) { printf("1"); flag = 0; } printf("%d%c", number[i], result[i]); } else { if (flag == 0) { printf("1"); flag = 1; } if (result[i]=='1') { printf("11"); } else { printf("%c", result[i]); } } } return 0; } 

讯享网
小讯
上一篇 2025-03-18 19:07
下一篇 2025-01-17 08:08

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/118425.html