关于用C从txt文件查找单词的搜索算法优化问题

发布于 2022-08-25 01:48:29 字数 89 浏览 14 评论 0

用C或C++实现从一个比较大的txt文件里查找一个单词,txt文件里每行一个单词,按a~z从上到下排列,有什么好的算法,用什么数据结构可以提高查询的速度和效率??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

美男兮 2022-09-01 01:48:29

这种情况考虑下面这种数据结构:
字典树(DictTree)

typedef struct _dict_tree_
{
    struct _dict_tree_ * dt[TREENODENUM];
    char    c ;
    char    flag ;
}DT ;

具体操作就是

所谓的26叉树,按照每个字母对应的子节点存储。
然后逐行读取单词后插入到树中,比如说:
单词:abandon
插入树的顺序就是
a->b->a->n->d->o->n
插入每个字母对应这个树的子节点

int len = strlen(str);
while( i < len )
{
    index = str[i] - 97 ;        /*通过 index 来找到子节点*/
    if( pt->dt[index] == NULL )
    {
        pt->dt[index] = ( DT *)malloc( sizeof( DT) );
        pt->dt[index]->c = str[i] ;
        pt->dt[index]->flag = EMPTY ;
        for( j = 0 ; j < TREENODENUM ; j++ )
        {
            pt->dt[index]->dt[j] = NULL ;
        }
    }
    pt = pt->dt[index] ;
    i++;
}

查找就是顺着字母判断子节点是否为空

int len = strlen(str);
while( i != len )
{
    index = str[i] - 97 ;
    if( pt->dt[index] == NULL )
        return 0 ;
    pt = pt->dt[index] ;
    i++;
}
夏花。依旧 2022-09-01 01:48:29

如果允许对txt文件预处理的话,可以用倒排索引来实现。

如果txt文件只查一次、以后再也用不到的话,那就没有。

萌化 2022-09-01 01:48:29

按你的题目来看,似乎这些单词都是排过序的?如果是有序的话,就可以按照二分的方法来做。先读取文件总共由多少行,然后以第一个字符来查找,再按照第二个字符,以此类推,这个算法的好处是不用读取所有文件到内存中。

-残月青衣踏尘吟 2022-09-01 01:48:29

如果修改一下问题,这个txt文件有1T大,怎么弄会好点。声望不够,改不了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文