poj2001 trie

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int T[100100][26] = {0}, num[100100] = {0}, sz = 0;
char s[1010][21];
void Insert(char *s){
	int u = 0;
	for (int i = 0; s[i]; i++){
		int c = s[i] - 'a';
		if (!T[u][c])
			T[u][c] = ++sz;
		u = T[u][c];
		num[u] ++;
	}
}
void Search(char *s){
	int u = 0;
	for (int i = 0; s[i]; i++){
		if (num[u] == 1) break;
		u = T[u][s[i] - 'a'];
		printf("%c", s[i]);
	}
	printf("\n");
}
int main(){
	int n = 0;
	while (scanf("%s", s[++n]) == 1)
		Insert(s[n]);
	for (int i = 1; i <= n; i++){
		printf("%s ", s[i]);
		Search(s[i]);
	}

    return 0;

} 
时间: 2024-09-24 09:04:21

poj2001 trie的相关文章

从Trie树(字典树)谈到后缀树(10.28修订)

作者:July.yansha. 出处:http://blog.csdn.net/v_JULY_v .  引言     常关注本blog的读者朋友想必看过此篇文章:从B树.B+树.B*树谈到R 树,这次,咱们来讲另外两种树:Tire树与后缀树.不过,在此之前,先来看两个问题.     第一个问题: 一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析.     之前在此文:海量数据处理面试题集锦与Bit-map详解中给出的参考答案:用trie

poj 3321 Apple Trie

/*   poj 3321 Apple Trie   这道题的关键是如何将一个树建成一个一维数组利用树状数组来解题!   可以利用dfs()来搞定,我们在对一个节点深搜后,所经过的节点的数目就是该节点的子树的数目   所以我们利用start[i]数组来记录 i 节点在一维数组的起始位置, 而end[i]则是记录i节点所有孩子   节点最后一个孩子节点在数组的位置,那么end[i]-start[i]+1,就是 i 节点(包括自身)和其所有孩子节点的   数目.数组建好了,那么最后就是套用树状数组模

字典树(Trie tree)

Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高. 性质 它有3个基本性质: 根节点不包含字符,除根节点外每一个节点都只包含一个字符. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串. 每个节点的所有子节点包含的字符都不相同. [编辑]图示 这是一个Trie结构的例子:  在这个Trie结构中,保存

[算法系列之二十]字典树(Trie)

一 概述 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计. 二 优点 利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高. 三 性质 (1)根节点不包含字符,除根节点外每一个节点都只包含一个字符: (2)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串: (3)每个节点的所有子节点包含的字符都不相同. 单词列表为"apps&

字典树(Trie Tree)

基本概念和性质 在计算机科学中,trie,又称前缀树或字典树或单词搜索树,是一种有序树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直 接保存在节点中,而是由节点在树中的位置决定.一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串.一般情况下,不是 所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值. 本文地址:http://www.cnblogs.com/archimedes/p/trie-tree.html,转载请注明

字典树(Trie树)的实现及应用

一.字典树的概念 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. 与二叉查找树不同,Trie树的键不是直接保存在节点中,而是由节点在树中的位置决定.一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串.一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值. Trie树优点是最大限度地减少无谓的字符串比较,查询效率比较高.核心思想是空间换时

关于Trie树的模板

Trie树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高. ---百度百科 具体给出代码,这也是根据大牛们的一些代码整的,,还是太渣了..... #include <iostream> #include <cstdio> #include <cstring&g

Trie树的C++实现

Trie-单词查找树 Trie,又称单词查找树.前缀树,是一种哈希树的变种.应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计. 性质: 1.根节点不包含字符,除根节点外的每一个节点都只包含一个字符. 2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串. 3.每个节点的所有子节点包含的字符都不相同. 优点: 1.查询快.对于长度为m的键值,最坏情况下只需花费O(m)的时间:而BST需要O(m log n)的时间. 2.当存储大量字符串时,Trie耗费的空间较少.因为

Hash树(散列树)和Trie树(字典树、前缀树)

1.Hash树 理想的情况是希望不经过任何比较,一次存取便能得到所查的记录, 那就必须在记的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和一个唯一的存储位置相对应.因而在查找时,只要根据这个对应关系f找到 给定值K的像f(K).由此,不需要进行比较便可直接取得所查记录.在此,我们称这个对应关系为哈希(Hash)函数,按这个思想建立的表为哈希表. 在哈希表中对于不同的关键字可能得到同一哈希地址,这种现象称做冲突.在一般情况下,冲突只能尽可能地减少,而不能完全避免.因为哈希函数是从