Java中的天真后缀树实现

时间:2015-02-24 10:27:12

标签: java algorithm suffix-tree

我正在尝试用一个朴素的构建算法编写后缀树类,该算法是O(m ^ 2)而不是Ukkonen。

我怀疑如何代表树。到目前为止,我有这个。但我不认为这是节点和边的写类结构。关于如何维护节点和边缘之间的映射/关系的任何建议。重要的一点是,在边缘我们只存储起始和结束索引以节省空间。

class suffixTree{
Node[] nodes;
Edge[] edge;
}

class Node{
  int node_id;
  Edge[] outgoingEdges;
}

class Edge{
  int start_index;
  int end_index;
  int start_node_id;
  int end_node_id;
}

1 个答案:

答案 0 :(得分:3)

我会这样做:

class SuffixTree {
    // A tree only needs to know about the root Node.
    Node root;
}

// A Node contains a mapping from the first character to
// an Edge that corresponds to it.
// It doesn't need to know about anything else.
class Node {
    Map<Character, Edge> edgeMap;
}

// An Edge contains only the start and the end index of the substring
// and the destination Node.
class Edge {
    int startIndex;
    int endIndex;
    Node destination;
}

最重要的变化是:

  1. 摆脱所有三个班级的冗余信息。

  2. 使用引用而不是数组和索引。