簡體   English   中英

后綴樹實現問題

[英]suffix tree implementation issue

我正在研究一些后綴樹實現,這里是一個參考實現,問題是如何將“索引”(參見第 19 行)用於類 SuffixTreeNode? 我不確定“索引”是否有用,我認為我們可能只需要保留所有節點及其子節點的字符值? 找不到太多的“索引”值用於類 SuffixTreeNode。

請隨時糾正我。 任何見解表示贊賞。

public class SuffixTree {
    SuffixTreeNode root = new SuffixTreeNode();
    public SuffixTree(String s) {
        for (int i = 0; i < s.length(); i++) {
            String suffix = s.substring(i);
            root.insertString(suffix, i);
        }
    }

    public ArrayList<Integer> getIndexes(String s) {
        return root.getIndexes(s);
    }
 }

public class SuffixTreeNode {
    HashMap<Character, SuffixTreeNode> children = new
    HashMap<Character, SuffixTreeNode>();
    char value;
    ArrayList<Integer> indexes = new ArrayList<Integer>();
    public SuffixTreeNode() { }

    public void insertString(String s, int index) {
        indexes.add(index);
        if (s != null && s.length() > 0) {
            value = s.charAt(0);
            SuffixTreeNode child = null;
            if (children.containsKey(value)) {
                child = children.get(value);
            } else {
                child = new SuffixTreeNode();
                children.put(value, child);
            }
            String remainder = s.substring(1);
            child.insertString(remainder, index);
        }
    }

    public ArrayList<Integer> getIndexes(String s) {
        if (s == null || s.length() == 0) {
            return indexes;
        } else {
            char first = s.charAt(0);
            if (children.containsKey(first)) {
                String remainder = s.substring(1);
                return children.get(first).getIndexes(remainder);
            }
        }
        return null;
    }
}

public class Question {
    public static void main(String[] args) {
        String testString = “mississippi”;
        String[] stringList = {“is”, “sip”, “hi”, “sis”};
        SuffixTree tree = new SuffixTree(testString);
        for (String s : stringList) {
            ArrayList<Integer> list = tree.getIndexes(s);
            if (list != null) {
                System.out.println(s + “: “ + list.toString());
            }
        }
    }
}

您正在查看的后綴樹的實現肯定需要indexes (后綴樹有多個版本,其中一些版本比其他版本更優化)。 indexes變量在將原始字符串 (mississippi) 中存在的子字符串 (is, sip, hi, sis) 的索引返回給調用方法方面起着不可或缺的作用。 getIndexes在其基本情況下返回indexes ,這是獲取每個子字符串出現列表的方式。 見下面的輸出

is: [1, 4]
sip: [6]
sis: [3]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM