运行长度编码假设

时间:2018-05-28 23:57:06

标签: c# data-compression run-length-encoding

实现Run-length encoding (RLE)时,我可以假设运行将短于一个字节吗?

所以不存在像这样的运行的情况

WWWBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB...

当有256个B时,因为你不能用一个字节表示那个长度而你可以把W表示为3W

如果没有,运行是否应分为两个运行?应如何处理这种情况?我找不到有关此案例的任何信息。

1 个答案:

答案 0 :(得分:1)

据我了解,您正确了解情况。用于计算字符重复的字长通常是一个字节,并且各个字符通常也被编码为一个字节。如果在输入中有重复,例如, 300 using System; using System.Diagnostics; using System.Threading; namespace StopwatchExample { class Program { static void Main() { ////Works //DateTime start = DateTime.Now; //while (true) //{ // DateTime current = DateTime.Now; // var diffInSeconds = (current - start).TotalSeconds; // if (diffInSeconds > 5) // { // Console.WriteLine("5 s done!"); // break; // } //} // Does not work Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); while (true) { stopwatch.Stop(); if (stopwatch.Elapsed.Seconds > 5) { Console.WriteLine("5 s done!"); break; } else { stopwatch.Start(); } } Console.ReadLine(); } } } ,编码如下。

b

总的来说,大于255的长度必须在两次运行中分开。话虽这么说,实际的编码取决于具体的实现;也可以使用除字节之外的其他类型来计算字符的重复次数。