POJ 2503 构造字典 翻译单词 使用字典树
2013-08-29 20:51
393 查看
#include<iostream> #include<string> #include<fstream> using namespace std; //#define DEBUG #define MAXNODE 500000 struct dictree { char word[11]; /* 10 lowercase at most */ struct dictree *next[26]; }; static struct dictree root, node[MAXNODE]; /* reduce dynamic allocate to improve performace */ static int p; static char notfind[] = "eh"; void insert(char *word, char *text) { struct dictree *cur = &root; while (*word) { int i = *word - 'a'; if (!cur->next[i]) cur->next[i] = &node[p++]; cur = cur->next[i]; word++; } strncpy(cur->word, text, 10); } char* search(char *word) { struct dictree *cur = &root; while (*word && cur) { int i = *word - 'a'; cur = cur->next[i]; word++; } if (!cur) return notfind; return cur->word; } int main() { #ifdef DEBUG fstream cin("G:\\book\\algorithms\\acm\\Debug\\dat.txt"); #endif char word[11], text[11]; while (1) { cin >> text; if (cin.peek() != ' ') break; cin >> word; insert(word, text); } cout << search(text) << "\n"; while (cin >> word) { cout << search(word) << "\n"; } return 0; }
在解决该题的过程中有几点要注意。
避免节点的动态分配,因为动态分配比较占用时间。使用全局变量的方式就存在一个问题:预估可能使用的节点的最大数目。(100000 * 10)最大,但是这个预估不是很合理。
关于输入格式上浪费了很多的时间。主要是对cin的格式输入的分隔符的处理上的不理解所造成的。默认空格,换行都是分割符。读到分隔符后返回,下次从分割符的下一个字符开始提取。如果下一个字符还是分割符继续跳过。
例外一个奇怪的是
预分配的节点1000000时POJ的结果如下
Accepted 13596K 641MS C++ 1168B
预分配的节点500000时POJ的结果如下
Accepted 13596K 657MS C++ 1167B
内存占用没有减少怎么回事?
相关文章推荐
- poj 2503:Babelfish(字典树,经典题,字典翻译)
- POJ 2503 - Babelfish(字典树)
- POJ 2503:Babelfish(字典树入门)
- POJ2503 - Babelfish - 字典树
- poj-2503 字典树
- 技巧114 使用字典中的单词进行自动补全
- POJ2503 -- 字典树
- hdu 1075:What Are You Talking About(字典树,经典题,字典翻译)
- POJ 2503 单词映射(map)
- Python基础之——使用字典和函数构造switch
- POJ 2503 Babelfish(map,字典树,快排+二分,hash)
- 给定一个字符串s和一个单词dict的字典,在s中添加空格来构造一个句子,其中每个单词都是有效的字典单词。
- (使用STL中的数据结构进行编程7.3.15)UVA 630 Anagrams (II)(求一个单词在字典中出现的次数)
- hdu 1075 What Are You Talking About(给你字典,让你翻译句子,字典中查不到的单词不用翻译)
- POJ 2503 Babelfish 字典树应用
- POJ_2503_Babelfish【字典树】
- POJ 2503 Babelfish(map,字典树,快排+二分,hash)
- POJ 2503 Babelfish(字典树Trie)
- POJ 2503 Babelfish(字典树)
- POJ 2503 Babelfish(字典树水题)