如何在块排序中对数组后缀进行排序
|
我正在阅读Burrows和Wheeler论文中的块排序算法。
这是算法的步骤:
假设S = abracadabra
初始化一个包含N个单词W [0,...,N-1]的数组W,以使W [i]包含字符S \'[i,...,i + k-1]进行排列,以便进行整数比较在单词上与在k字符字符串上的字典比较是一致的。将字符打包成单词有两个好处:它允许使用对齐的内存访问一次比较两个前缀k个字节,并且可以消除许多慢速情况
(注意:“ 0”是原始的“ 1”,后面附加了k个“ 2”个字符,k是适合一个机器字的字符数(我是32位机器,所以是“ 3”个)
EOF = \'$\'
如果我错了纠正我:
S\'= abracadabra$$$$
W= abra brac raca acad cada adab dabr abra bra$ ra$$ a$$$
然后,该算法表示您必须对into1ѭ(称为V)的后缀数组进行排序,
数组“ 7”。
我不完全了解如何通过索引W
对后缀进行排序。
例如:在排序的某个点,假设您得到两个后缀i
和j
,并且必须对其进行比较。由于您正在索引W
,因此您正在检查4个字符。
假设它们的前四个字符相同。然后,您将需要检查每个后缀的下一个4个字符,并通过在W
中从每个后缀的第4个位置进行访问来进行检查。
这是正确的吗? “将字符打包成单词”是否真的加快了速度?
没有找到相关结果
已邀请:
2 个回复
募磷
癸痊醒
然后
我希望我说的对:)完全匹配它们不是问题,任何顺序都可以。关键是,当您应用反向转换时,您需要能够恢复W才能恢复原始字符串,并且W的相同元素不会对此造成问题。