【问题标题】:compressed suffix array in pythonpython中的压缩后缀数组
【发布时间】:2018-03-25 17:01:25
【问题描述】:

python中是否有关于压缩后缀数组Psi的实现?我实际上了解后缀数组是如何工作的,并让 Psi 给定一个后缀数组,但是有没有办法通过使用 python 来获得它?我正在搜索是否有一些库或另一个实现之王,但没有遇到可以在 python 中使用的东西。 这是一个例子:

offset     0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 #indexes
Text       a  b  b  a  a  b  b  a  a  a  b  a  b  b  b  $ 
SA         15 7  8  3  9  4  0 11 14  6  2 10 13  5  1 12 #suffix array
Psi        $  2  4  5 11 13 14 15  0  1  3  7  8  9 10 12 #Psi

Psi 数组是通过查找索引获得的。例如,对于 Psi 数组中的索引 1,我们必须在 SA 中的索引 1 中查找值(它是 7)现在我们将 1 添加到值 (7+1) 并查看与该值 8 关联的索引(在本例中为 2) .对于 Psi 中的索引 2,我们在 SA (8) 中的索引 2 中查找值并添加 1 (8+1),然后查看与该值 9 相关联的索引,结果为 4,依此类推。

【问题讨论】:

    标签: python suffix-array


    【解决方案1】:

    真的不需要图书馆:

    Text = "abbaabbaaababbb"
    
    SA = sorted(list(range(0,len(Text)+1)), key=lambda i:Text[i:])
    
    SAINV = [None]*(len(SA)+1)
    for i in range(0,len(SA)):
        SAINV[SA[i]]=i
    
    Psi = [SAINV[pos+1] for pos in SA]
    
    print SA
    print SAINV
    print Psi
    

    产量:

    [15, 7, 8, 3, 9, 4, 0, 11, 14, 6, 2, 10, 13, 5, 1, 12]
    [6, 14, 10, 3, 5, 13, 9, 1, 2, 4, 11, 7, 15, 12, 8, 0, None]
    [None, 2, 4, 5, 11, 13, 14, 15, 0, 1, 3, 7, 8, 9, 10, 12]
    

    【讨论】:

      猜你喜欢
      • 2017-12-07
      • 2014-11-01
      • 2016-12-26
      • 2019-07-05
      • 2018-11-03
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多