在特里搜索单词?

时间:2016-05-04 08:04:32

标签: java trie

我有一个Java中的Trie,我想要搜索一下这个词。

例如:Trie:[casa-perro-animal],hogar = false; casa = true;

public boolean search (String word){
    /**Method to complete**/
}

带有Node的类Trie:

public class Trie {
/**
 * Clase auxiliar para guardar caracteres que forman parte de una palabra
 * @author zenon
 */
protected class Info {
    char c;    // Caracter actual
    Info alt;  // Caracter alternativo para la misma posición
    Info next; // Caracter que es la primera opción en la siguiente posición

    public Info(char c, Info alt, Info next) {
        this.c = c;
        this.alt = alt;
        this.next = next;
    }
}

protected Info root; // Referencia al punto de inicio de la estructura

有任何帮助吗?我是西班牙人。非常感谢你。

1 个答案:

答案 0 :(得分:0)

您正在查看Trie的doubly chained tree实施:
<子> image and description from wikipedia's entry on Trie

Doubly chained tree implementation of Trie

垂直箭头是子指针,虚线水平箭头是下一个指针。存储在此trie中的字符串集是{baby, bad, bank, box, dad, dance}。列表被排序为允许以字典顺序遍历


如何搜索

您的搜索必须逐个使用已搜索的word中的字符并导航特里。

取第一个字符并检查您的根是否包含它。如果是,您可以移动到word中的下一个字符,然后沿实线箭头向下移动到当前列表的下一个节点 - 在您的实现中,它是next节点输入Info。这样您就可以向下遍历相同的列表(根据上图)。

如果当前节点不包含您要搜索的字符,则水平移动到下一个替代列表(沿虚线)。在您的情况下,这由alt Info节点表示。你在那里重复同一个字母的测试。如果没有运气,请再次转到下一个替代清单。

如果您在给定级别检查了所有其他列表而没有任何匹配,并且面临死胡同(alt == null),则可以得出结论word不包含在 trie 中。

相反,如果您使用了word中的所有字符并且位于列表中的最后一个节点(即next == null),那么您可以得出结论{{ 1}}存储在 trie