Estructura de datos y algoritmo: árbol Trie/árbol de diccionario

class Trie {
public:
    Trie* c[26];
    bool isstring;

    Trie(){
        memset(c, 0, sizeof(c));
        isstring = false;
    }

    Trie* searchPrefix(string& prefix) {
        Trie* p = this;
        for(char& ch: prefix){
            int index = ch-'a';
            if(!p->c[index]){
                return 0;
            }
            p = p->c[index];
        }
        return p;
    }

    void insert(string& word) {
        Trie* p = this;
        for(char& c: word){
            int index = c-'a';
            if(p->c[index] == 0){
                p->c[index] = new Trie();
            }
            p = p->c[index];
        }
        p->isstring = true;
    }

    bool search(string& word) {
        Trie* p = searchPrefix(word);
        return p && p->isstring;
    }

    bool startsWith(string& prefix) {
        return searchPrefix(prefix);
    }
};

Aplicación de árbol de diccionario:

Consultar si ha aparecido una palabra y la frecuencia de aparición

Consultar si una palabra ha aparecido como prefijo y la frecuencia de aparición

Deduplicación de cadenas

Cuente las k palabras más frecuentes entre n palabras (árbol de diccionario + montón mínimo)

referencia:

Árbol de prefijos Trie animado - Zhihu (zhihu.com)

Trie tree (árbol prefijo) - Luo Songchao - Blog Garden (cnblogs.com)

Una colección de preguntas de entrevista para el procesamiento masivo de datos_v_JULY_v's Blog-CSDN Blog

Supongo que te gusta

Origin blog.csdn.net/qq_41021141/article/details/131333704
Recomendado
Clasificación