lztrie buildLZTrie(byte *text, uint **ids, byte s) { trie T; uint n; uint *parent; byte *letters; lztrie LZT; unsigned long long aux; // first creates a full trie T #ifdef INDEXREPORT ticks= sysconf(_SC_CLK_TCK); times(&time); t1 = time.tms_utime; printf(" Building LZTrie...\n"); fflush(stdout); printf(" Building normal trie...\n"); fflush(stdout); #endif T = createTrie(); do { text = insertTrie(T,text); } while (text[-1] != s); // now compresses it #ifdef INDEXREPORT times(&time); t2 = time.tms_utime; printf(" User time: %f secs\n",(t2-t1)/(float)ticks); fflush(stdout); t1 = t2; printf(" Representing with parentheses, letters and ids...\n"); fflush(stdout); #endif n = T->nid; aux = (2*(unsigned long long)n+W-1)/W; parent = malloc(aux*sizeof(uint)); letters = malloc(n*sizeof(byte)); aux = (((unsigned long long)n)*bits(n-1)+W-1)/W; *ids = malloc(aux*sizeof(uint)); representTrie(T,parent,letters,*ids,NULL,bits(n-1)); #ifdef INDEXREPORT times(&time); t2 = time.tms_utime; printf(" User time: %f secs\n",(t2-t1)/(float)ticks); fflush(stdout); t1 = t2; printf(" Freing trie...\n"); fflush(stdout); #endif destroyTrie(T); #ifdef INDEXREPORT times(&time); t2 = time.tms_utime; printf(" User time: %f secs\n",(t2-t1)/(float)ticks); fflush(stdout); t1 = t2; printf(" Creating compressed trie...\n"); fflush(stdout); #endif LZT = createLZTrie(parent,letters,*ids,n); #ifdef INDEXREPORT times(&time); t2 = time.tms_utime; printf(" User time: %f secs\n",(t2-t1)/(float)ticks); fflush(stdout); t1 = t2; printf(" End of LZTrie\n"); fflush(stdout); #endif return LZT; }
int main() { int n, flag; char str[25]; while(scanf("%d", &n) == 1) { TrieSize = 0; memset(&Node[0], 0, sizeof(Node[0])); while(n--) { scanf("%s", str); insertTrie(str); } scanf("%d", &n); while(n--) { scanf("%s", str); flag = insertTrie(str); if(flag) puts("yes"); else puts("no"); } } return 0; }
Trie preAC(unsigned char **mots, int nb_max) { /* Création de l'etat q0 et du trie */ Trie trie = createTrie(nb_max * 60); /* Taille max d'un mot = 60 */ int i; /* Inserer dans le trie */ for (i = 0; i < nb_max; i++) {insertTrie(trie, mots[i]);} /* Completer la racine */ completer_trie(trie); /* Completer avec les supps*/ complete(trie); /* return */ return trie; }
int main() { int t; char buf[35]; scanf("%d", &t); getchar(); getchar(); while(t--) { int n = 0; memset(&Node[0], 0, sizeof(Node[0])); TrieSize = 0; while(gets(buf)) { if(buf[0] == '\0') break; insertTrie(buf); n++; } printAns(n, 0, 0); if(t) puts(""); } return 0; }
bool Dictionary::loadDictionary(string fileName) { int stringSize, totWords = 0, sucWords = 0; string full, word, definition; fstream input; input.open(fileName.c_str(), ios::in); if(!(input.is_open())) { return false; } while(getline(input, full)) { word = ""; definition = ""; stringSize = full.length(); for(int i = 0; i < stringSize; i++) { if(full[i] == ':') { for(int j = 0; j < i; j++) { word += full[j]; } for(int k = i; k < stringSize; k++) { if(isalpha(full[k])) { for(int l = k; l < stringSize; l++) { definition += full[l]; } totWords++; break; } } break; } } if(insertTrie(word, definition)) { sucWords++; } } input.close(); if(sucWords == totWords) { return true; } else { return false; } }