实现Run-length encoding (RLE)时,我可以假设运行将短于一个字节吗?
所以不存在像这样的运行的情况
WWWBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB...
当有256个B时,因为你不能用一个字节表示那个长度而你可以把W表示为3W
如果没有,运行是否应分为两个运行?应如何处理这种情况?我找不到有关此案例的任何信息。
答案 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的长度必须在两次运行中分开。话虽这么说,实际的编码取决于具体的实现;也可以使用除字节之外的其他类型来计算字符的重复次数。