era*_*ros 12 sorting algorithm suffix-array burrows-wheeler-transform
我正在阅读Burrows和Wheeler论文中的块排序算法.这是算法的一个步骤:
假设S = abracadabra
初始化N个字W [0,...,N-1]的数组W,使得W [i]包含排列的字符S'[i,...,i + k-1],以便进行整数比较.这些词同意对k字符串的词典比较.将字符打包成单词有两个好处:它允许使用对齐的内存访问一次比较两个前缀k个字节,并且它允许消除许多慢速情况
(注意:S'是附加S了k个EOF字符的原件,k是适合机器字的字符数(我是32位机器,所以k=4)
EOF = '$'
Run Code Online (Sandbox Code Playgroud)
如我错了请纠正我:
S'= abracadabra$$$$
W= abra brac raca acad cada adab dabr abra bra$ ra$$ a$$$
Run Code Online (Sandbox Code Playgroud)
然后,算法说你必须S通过索引到数组W来对后缀数组(名为V)进行排序.
我不完全明白你如何通过索引来排序后缀W.例如:在分选的某一点,假设你得到两个后缀,i并且j,你必须对它们进行比较.由于您正在编入索引W,因此您当时要检查4个字符.
假设它们具有相同的前4个字符.然后,您必须检查每个后缀的下4个字符,并通过从每个后缀的第4个位置访问来完成W.这是正确的吗?这种"将字符包装成文字"真的能加快速度吗?
您在问题中描述它的方式是完全准确的。是的,它加快了速度,因为就像你说的,它一次比较四个字符。
不过,有两点需要说明:
| 归档时间: |
|
| 查看次数: |
1293 次 |
| 最近记录: |