大字符串的洞穴轮车实施

时间:2012-12-07 04:46:39

标签: burrows-wheeler-transform

我尝试在burrow wheeler循环字符串数组中旋转一个非常大的字符串。

但我的输入大约有200000个字符,当输入很大时,我无法运行代码,因为它耗尽了堆空间。

我的教授说,实现它的唯一方法是线性内存占用。我不知道这意味着什么。

我可以知道创建循环字符串的其他方法,这种方法可以节省内存并使用它而不会耗尽内存

1 个答案:

答案 0 :(得分:1)

减少内存使用量的诀窍是创建一个循环后缀数组,使用quicksort的变体,可以在平均情况下与n lg n成比例(与n成比例)。它单独考虑字符串中的每个字符(也就是3向字符串快速排序;它在概念上类似于基数排序)。

即使占用太多内存,也需要限制burrows-wheeler转换以对固定大小的块进行操作(对X字符执行编码,然后执行下一个X字符等,直到您对其进行编码为止整个字符串,反转解码过程。)