zoukankan      html  css  js  c++  java
  • Suffix array

    A suffix array is a sorted array of all suffixes of a given string. The definition is similar to Suffix Tree which is compressed trie of all suffixes of the given text. Any suffix tree based algorithm can be replaced with an algorithm that uses a suffix array enhanced with additional information and solves the same problem in the same time complexity.

    A suffix array can be constructed from Suffix tree by doing a DFS traversal of the suffix tree. In fact Suffix array and suffix tree both can be constructed from each other in linear time.
    Advantages of suffix arrays over suffix trees include improved space requirements, simpler linear time construction algorithms (e.g., compared to Ukkonen’s algorithm) and improved cache locality.

    最简单的构建方法就是把所有的后缀取出来再排序,时间复杂度是O(n^2lgn),因为每次比较都要O(n)。有了suffix array之后的查找开销需要O(mlgn),m为pattern长度,用二分查找。

    当然,对于构建和查找都有线性的算法。

     有O(nlgnlgn)的构建算法,就是安前1个字符,前2个字符,前4个字符,前8个字符...一直到所有字符都排序过了。根据前$2^i$的排序结果,也就是该串中所有长度为$2^i$的子串的先后顺序都已经确定下来,所以可以在比较$2^{i+1}$长度的子串时,可以在O(1)内完成。所以每轮排序可以在O(nlgn)完成,总共有lgn轮排序,所以整个时间复杂度在O(nlgnlgn)。实现起来还是很巧妙的,没细看。

    转自:http://www.geeksforgeeks.org/suffix-array-set-1-introduction/

    http://www.geeksforgeeks.org/suffix-array-set-2-a-nlognlogn-algorithm/

  • 相关阅读:
    为什么Java中字符串是不可变的
    面试问题-使用Java线程做数学运算
    Java中静态类型检查是如何进行的
    Java是如何处理别名(aliasing)的
    Java字符串中常见的10个问题
    深入理解“HelloWorld”小程序
    往文件中按行写入数据
    HashSet vs TreeSet vs LinkedHashSet
    FileOutputStream VS FileWriter
    CentOS下添加Root权限用户(超级用户)方法
  • 原文地址:https://www.cnblogs.com/linyx/p/4083189.html
Copyright © 2011-2022 走看看