001-RLE算法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了001-RLE算法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2621字,纯文字阅读大概需要4分钟。
内容图文
![001-RLE算法](/upload/InfoBanner/zyjiaocheng/1237/08656f71d6c24773a51cfaeeecc3e1fb.jpg)
一、定义
RLE全称(run-length encoding),翻译为游程编码,又译行程长度编码,又称变动长度编码法(run coding),在控制论中对于二值图像而言是一种编码方法,对连续的黑、白像素数(游程)以不同的码字进行编码。游程编码是一种简单的非破坏性资料压缩法,其好处是加压缩和解压缩都非常快。其方法是计算连续出现的资料长度压缩之。
是一个针对无损压缩的非常简单的算法。它用重复字节和重复的次数来简单描述来代替重复的字节。尽管简单并且对于通常的压缩非常低效,但它有的时候却非常有用(例如, JPEG 就使用它)。
二、特点
RLE 解码器遇到符号‘ 0 ’ 的时候,它表明后面的两个字节决定了需要输出哪个符号以及输出多少次。
![技术分享图片](/upload/getfiles/default/2022/11/4/20221104045509755.jpg)
因此非重复节可以有任意长度而不被控制字节打断,除非指定的标记字节出现在非重复节(顶多以两个字节来编码)的稀有情况下。为了最优化效率,标记字节应该是输入流中最少出现的符号(或许就不存在)。
重复 runs 能够在 32768 字节的时候运转。少于 129 字节的要求 3 个字节编码(标记 + 次数 + 符号),而大雨 128 字节要求四个字节(标记 + 次数的高 4 位 |0x80+ 次数的低 4 位)。这是通常所有采用的压缩的做法,并且也是相比较三个字节固定编码(允许使用 3 个字节来编码 256 个字节)而言非常少见的有损压缩率的方法。
在这种模式下,最坏的压缩结果是:输出大小 =257/256* 输入大小 +1
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RunLengthEncoding { public static String encode(String source) { StringBuffer dest = new StringBuffer(); for (int i = 0; i < source.length(); i++) { int runLength = 1; while (i+1 < source.length() && source.charAt(i) == source.charAt(i+1)) { runLength++; i++; } dest.append(runLength); dest.append(source.charAt(i)); } return dest.toString(); } publicstatic String decode(String source) { StringBuffer dest = new StringBuffer(); Pattern pattern = Pattern.compile("[0-9]+|[a-zA-Z]"); Matcher matcher = pattern.matcher(source); while (matcher.find()) { int number = Integer.parseInt(matcher.group()); matcher.find(); while (number-- != 0) { dest.append(matcher.group()); } } return dest.toString(); } publicstaticvoid main(String[] args) { String example = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW"; System.out.println(encode(example)); System.out.println(decode("1W1B1W1B1W1B1W1B1W1B1W1B1W1B")); } }
原文:https://www.cnblogs.com/bjlhx/p/8660397.html
内容总结
以上是互联网集市为您收集整理的001-RLE算法全部内容,希望文章能够帮你解决001-RLE算法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。