标题:谁来教教我tire树啊0.0
只看楼主
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
结帖率:94.44%
已结贴  问题点数:100 回复次数:5 
谁来教教我tire树啊0.0
现在在做搜索的题目,老遇到有关字符窜搜索的题目,而最佳方法就是用tire树用空间来换时间,但是网上找了下,都没有全面的资料(可能我不会查资料),我查到的都是几句简单的话+一个没有注释的代码,所以我怎么也看不到他是如何实现的所以求各位帮我弄份简单易懂的资料给我啊,小弟不胜感谢啊
搜索更多相关主题的帖子: tire 
2010-08-07 08:11
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:50 
好吧,帮你找到资料了:
http://ansj-sun.blog.
http://blog.
不知道对不对,看看哦

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-08-07 08:22
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
第2个有点注释,我看看 能看懂不,非常感谢啊
2010-08-07 08:36
我的s天空
Rank: 2
等 级:论坛游民
帖 子:8
专家分:51
注 册:2010-3-13
得分:50 
#include<stdio.h>
#include<math.h>
main()
{
double y;
int x,m;
for(y=1;y>=-1;y-=0.1)
  {
    m=acos(y)*10;
    for(x=1;x<m;x++) prinf(" ");
    printf("*")
    for(;x<62-m;x++) printf(" ");
    printf("*\n");
   }
}

先看看这个程序,是输出一个余弦波形,可能对你有启示
2010-08-07 10:21
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 4楼 我的s天空
你是在回答我的问题吗表示不懂
2010-08-07 10:32
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 2楼 sunyh1999
看了那有注释的代码,貌似有点懂了,于是就去做这题http://acm.hdu.
Sample和自己想的几个案例饿都过了,可是提交时说超内存了
帮帮看看哪错了 还是哪可以优化下啊
我的代码是这样的希望能看懂啊
#include<stdio.h>
#include<stdlib.h>
struct tree
{
    int flag;
    struct tree *next[10];
};
void tree1(struct tree *root)
{
    int i;
    for(i=0;i<10;i++)
    {
        root->flag=0;
        root->next[i]=NULL;
    }
}
int count;
void tire_tree(struct tree *root,char word[10])
{
    struct tree *p=root;
    int tem,i=0;
    while(word[i])
    {
        if(p->flag==1)//判断它的前缀单词是否存在
           count++;
        tem=word[i]-'0';
        if(p->next[tem]==NULL)
        {
            p->next[tem]=(struct tree *)malloc(sizeof(struct tree));
            tree1(p->next[tem]);
        }
        if(p->next[tem]&&word[i+1]=='\0')//判断以它为前缀的单词是否存在
        count++;
        p=p->next[tem];
        i++;
    }
    p->flag=1;
}
int main()
{
    int t,n,i;
    char word[10];
    struct tree *root=NULL;
    while(~scanf("%d",&t))
    {
        while(t--)
        {
            scanf("%d",&n);
            getchar();
            count=1;
            root=(struct tree *)malloc(sizeof(struct tree));
            tree1(root);
            for(i=0;i<n;i++)
            {
                gets(word);
                tire_tree(root,word);
            }
            if(count>1)
                printf("No\n");
            else
                printf("Yes\n");
        }
    }
    return 0;
}

[ 本帖最后由 草狼 于 2010-8-7 10:56 编辑 ]
2010-08-07 10:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-315012-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.105657 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved