MTF算法
来源:互联网 发布:邻家女孩在淘宝有店吗 编辑:程序博客网 时间:2024/05/16 01:45
MTF(move-to-front)是一种数据编码方式,用于提高数据压缩技术效果。
在数据压缩算法中,MTF可以作为一个额外的步骤。也就是说 ,可以先进行MTF编码,在进行数据压缩。
主要使用的是数据的”空间局部性“,也就是最近出现过的字符很可能在接下来的文本附近再次出现。
MTF的主要思想是:
(1)维护一个文本字符集大小的栈,“recently used symbols”(最近访问过的字符),其中每个不同的字符在其中占一个位置,位置从0开始编号。
(2)扫描需要重新编码的文本数据,对于每个扫描到的字符,使用该字符在“recently used symbols”中的index替换,并将该字符提到“recently used symbols”的栈顶位置(index为0的位置)。
(3)转到(2),直到文本扫描结束。
使用MTF,对于许多连续的、相同的字符,将被替换为多个0;最近使用过的字符,会被小的index替换;最近很久没有使用过的字符,会被较大的index替换。MTF完成之后,文本就可以使用一串数字表示,如果文本数据具有较好的空间局部性,这些数字会很小,便于压缩。
import java.util.LinkedList;import java.util.List;public class MTF{ public static List<Integer> encode(String msg, String symTable){ List<Integer> output = new LinkedList<Integer>(); StringBuilder s = new StringBuilder(symTable); for(char c : msg.toCharArray()){ int idx = s.indexOf("" + c); output.add(idx); s = s.deleteCharAt(idx).insert(0, c); } return output; } public static String decode(List<Integer> idxs, String symTable){ StringBuilder output = new StringBuilder(); StringBuilder s = new StringBuilder(symTable); for(int idx : idxs){ char c = s.charAt(idx); output = output.append(c); s = s.deleteCharAt(idx).insert(0, c); } return output.toString(); } private static void test(String toEncode, String symTable){ List<Integer> encoded = encode(toEncode, symTable); System.out.println(toEncode + ": " + encoded); String decoded = decode(encoded, symTable); System.out.println((toEncode.equals(decoded) ? "" : "in") + "correctly decoded to " + decoded); } public static void main(String[] args){ String symTable = "abcdefghijklmnop"; test("dabc", symTable); }}
0 0
- MTF算法
- MTF
- MTF概论
- 解读MTF曲线
- MTF: Media Test Framework
- MTF(Modulation Transfer Function)
- 镜头的MTF曲线
- Zemax中的Mtf
- MTF的倾斜边缘计算方法
- MTF基本呼叫对象关系图
- 衍射极限、MTF与相机分辨率(1)
- 衍射极限、MTF与相机分辨率(2)
- 镜头性能的裁判:MTF测试仪
- 摄影镜头调制传输函数MTF解读
- Zemax中Spot Diagram和MTF
- 影像质量评估之锐利度--MTF(SFR)
- 影像质量评估之锐利度--MTF(SFR)
- 解析力评测(1) MTF和SFR
- python中read() readline()以及readlines()区别
- Litepal查询数据并按两个类别排序
- PANDAS 数据合并与重塑(concat篇)
- java编程思想读书笔记-第八章 接口和内部类
- sql练习题
- MTF算法
- CMake Tutorial(7)——Adding Support for a Dashboard
- L2-016. 愿天下有情人都是失散多年的兄妹-PAT团体程序设计天梯赛GPLT
- nswoj 集合运算
- 《ACM程序设计》书中题目 W
- eclipse如何直接进行生成快速的测试单元
- HTML5_CSS3学习笔记
- MySQL解压版配置
- Spark运行架构