通常在Burrows-Wheeler Transform算法中,$字符用于表示字符串的结尾,但在很多情况下,$ $被省略。
我想知道在不知道最后一个角色的位置的情况下它是如何反转的?
例如,我有这个BWT:
[[[[[1- [[11endgnad1234245ndbnbbb]]]]]]] nnnngnabbbdiaaaiaaii
遵循该算法,我可以轻松构建BWT矩阵的第一列,我选择以压缩方式表示,如下所示:
Character : Occurrences
1 : 4
2 : 2
3 : 1
4 : 2
5 : 1
[ : 7
] : 7
a : 7
b : 7
d : 4
e : 1
g : 2
i : 4
n : 9
在不知道哪个字符是原始字符串中的最后一个字符的情况下,我无法看到如何重建原始字符串。
非常感谢任何帮助。 升
P / S:如果您想知道原始字符串是什么:
[1]禁止[2]香蕉[3]频带[4]绷带[12]箱[14]结合[15]结合
答案 0 :(得分:1)
你不能(但你可以尝试;-)。 您的第一个bwt符号是原始字符串中的最后一个' S'。 现在,您应该通过LF映射向后展开原始字符串。 它实际上是bin [sym] + rank(sym,i)+ 1,你从i = 0开始。 您可以从出现中轻松获取bin []数组。 问题是,一旦你的'我''更大然后省略' $'你不应该在最后添加1' 1'所以你打破了字符串,事情变得讨厌。 如果您还重建sa []并覆盖已设置的索引,则可以检测到错误。因此,您可以将任意$位置设置为' 0' 0并尝试恢复,然后如果失败将其设置为1 ...直到您正确重建。不知道这是否可以优化。
干杯,
d