【问题标题】:Suffix array DC3 algorithm后缀数组 DC3 算法
【发布时间】:2013-09-07 02:29:05
【问题描述】:

我正在讨论 DC3 算法,用于构建后缀数组的线性时间算法。我无法理解论文中可以是found here 的技术。

我无法理解论文第 6 页提到的重命名是如何完成的。如何按照步骤 1 进行重命名。附录中的相关代码部分是:

for (int i = 0; i < n02; i++) 
{
     if (T[SA12[i]] != c0 || T[SA12[i]+1] != c1 || T[SA12[i]+2] != c2)
     { 
          name++; c0 = T[SA12[i]]; c1 = T[SA12[i]+1]; c2 = T[SA12[i]+2]; 
     }
     if (SA12[i] % 3 == 1) 
     { 
          R[SA12[i]/3] = name; 
     } // write to R1
     else
     { 
          R[SA12[i]/3 + n0] = name; 
     } // write to R2
 }

请帮助我理解这部分内容。 (此代码来自pdf的第20页)

【问题讨论】:

  • 我理解的部分是 name 是变量,对于不同的三元组是不同的,对于完全相同的三元组是相同的。但是不明白这里怎么用R的索引?

标签: algorithm suffix-array


【解决方案1】:

DC3 算法在 C++ 中可用,地址为DC3 Algorithm。 Repository 目前没有教程文档,但可能很快就会提供。

【讨论】:

    【解决方案2】:

    基数排序后,SA12[]中的相邻元素可能相等,所以循环中有一个if,对于R1和R2,举个例子:

    原始数组为[y a b b a d a b b a d o],n = 12,索引范围为[0,11] R1 = [1,4,7,10] R2=[2,5,8,11],“if (SA12[i] % 3 == 1)”表示SA12[i]属于R1,否则属于R2 , R 为 R1 和 R2 的浓度。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-02
      • 2013-09-29
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      相关资源
      最近更新 更多