我想知道是否有一些关键字可以研究以下问题:
在字典中搜索K个字符(如LZ77),同时找出所有匹配的长度和索引。 例如,
char A B C D E F G H I J
match length 4 2 1 3 3 5 2 1 2 1
index 2 5 7 0 9 1 3 4 8 6
如果我想知道将输出多少代码,可以通过一些方法对它们进行分组。最直观的方法是从char [0]中选择索引并按匹配长度对它们进行分组。 所以它将是
char A B C D E F G H I J
match length 4 - - - 3 - - 1 2 -
index 2 - - - 9 - - 4 8 -
{index,len}的代码将是{2,4},{9,3},{4,1},{8,2}。 代码是四。
或者可以按不超过匹配长度的长度对字符进行分组,例如
char A B C D E F G H I J
match length 4 - - - 1 5 - - - -
index 2 - - - 9 1 - - - -
{index,len}生成的代码为{2,4},{9,1},{1,5},可以输出比以前更少的代码。
我知道仍然有很多方法可以选择输出代码,选择方法也有一些好处。 (复杂性,速度,最小输出代码......)
我的问题是,是否有一些算法讨论这种选择问题?或者我可以寻找一些关键词?如果我无法获得搜索关键字,那真是令人困惑,那么我将无法开始研究。
感谢您的帮助!
答案 0 :(得分:1)
Deflate RFC讨论"懒惰匹配",这是尝试通过展望未来(或过去撤消过去)来尝试选择更好的匹配(幸运的是,未来可用)。这样的想法是,如果您可以在当前索引处选择匹配但不这样做可以选择更长的匹配,那么只需将当前符号输出为文字并接下来进行更长的匹配。这并不是最接近最佳状态,与贪婪地接受所有比赛无关,这只是一个改进。
Storer和Szymanski给出了一个算法,用于"最佳解析" (在某些假设下,特别是你知道你的选择的比特成本,你通常不会这样做),通过向后处理文件并记录每个位置的最佳选择和需要多少位。 / p>