public void insert() { startNode.addEdge(beginIndex, this); }
public void canonize() { if (isImplicit()) { Edge edge = originNode.findEdge(originNode.symbolAt(beginIndex)); int edgeSpan = edge.getSpan(); while (edgeSpan <= getSpan()) { beginIndex += edgeSpan + 1; originNode = edge.getEndNode(); if (beginIndex <= endIndex) { edge = edge.getEndNode().findEdge(originNode.symbolAt(beginIndex)); edgeSpan = edge.getSpan(); } } } }
Node node = stack.removeLast(); node.startSize = list.size(); if (node.getEdges().isEmpty()) { for (Edge edge : node.getEdges()) { Node endNode = edge.getEndNode(); endNode.depth = node.depth + edge.getSpan() + 1; Node node = iterator.previous(); int max = -1; for (Edge edge : node.getEdges()) { max = Math.max(edge.getEndNode().endSize, max);
private void updateSuffixNode(Node node, Node suffixNode) { if ((node != null) && (!node.equals(root))) { node.setSuffixNode(suffixNode); } }
public Edge(int beginIndex, int endIndex, Node startNode) { this.beginIndex = beginIndex; this.endIndex = endIndex; this.startNode = startNode; this.endNode = new Node(startNode, null); }
public void addEdge(int charIndex, Edge edge) { edges.put(symbolAt(charIndex), edge); }
public void remove() { startNode.removeEdge(beginIndex); }
public void changeOriginNode() { originNode = originNode.getSuffixNode(); }
Edge edge = node.findEdge(str.symbolAt(i)); if (edge == null) { return -1;
public Node splitEdge(Suffix suffix) { remove(); Edge newEdge = new Edge(beginIndex, beginIndex + suffix.getSpan(), suffix.getOriginNode()); newEdge.insert(); newEdge.endNode.setSuffixNode(suffix.getOriginNode()); beginIndex += suffix.getSpan() + 1; startNode = newEdge.getEndNode(); insert(); return newEdge.getEndNode(); }
private SuffixTree(Text text) { this.text = text; root = new Node(this, null); }
public void removeEdge(int charIndex) { edges.remove(symbolAt(charIndex)); }
public void remove() { startNode.removeEdge(beginIndex); }
public void changeOriginNode() { originNode = originNode.getSuffixNode(); }
public void canonize() { if (isImplicit()) { Edge edge = originNode.findEdge(originNode.symbolAt(beginIndex)); int edgeSpan = edge.getSpan(); while (edgeSpan <= getSpan()) { beginIndex += edgeSpan + 1; originNode = edge.getEndNode(); if (beginIndex <= endIndex) { edge = edge.getEndNode().findEdge(originNode.symbolAt(beginIndex)); edgeSpan = edge.getSpan(); } } } }
public void insert() { startNode.addEdge(beginIndex, this); }
private StringSuffixTree(String text) { suffixTree = SuffixTree.create(new StringText(text)); Queue<Node> queue = new LinkedList<>(); queue.add(suffixTree.getRootNode()); while (!queue.isEmpty()) { Node node = queue.remove(); if (node.getEdges().isEmpty()) { numberOfLeaves++; } else { numberOfInnerNodes++; for (Edge edge : node.getEdges()) { numberOfEdges++; queue.add(edge.getEndNode()); } } } numberOfInnerNodes--; // without root }
private void updateSuffixNode(Node node, Node suffixNode) { if ((node != null) && (!node.equals(root))) { node.setSuffixNode(suffixNode); } }