首页 > 编程知识 正文

生成树和快速生成树的区别,行为树原理

时间:2023-05-06 07:14:37 阅读:156009 作者:3412

1 .字符串搜索、字数统计、搜索引擎热门查询

将已知字符串(词典)的相关信息保存在树中,以确定是否出现了其他未知字符串或出现频率。

例如:

1 )有1G大小的文件。 每行是一个单词,单词的大小不超过16个字节,内存限制大小为1M。 返回频率最高的100个单词。

2 )写出由n个单词组成的熟语和全部用小写英语写的文章。 请按照最快的顺序写熟语中未包含的单词。

3 )拿出词典。 其中的单词是坏单词。 单词都是小写的。 给定更多的文本,文本的每一行也由小写字母组成。 判断文本中是否含有坏单词。 例如,如果rob是坏单词,则文本problem将包含坏单词。

4 ) 1000万个字符串,有的是重复的,需要去掉所有重复的,留下不重复的字符串

5 )寻找热门查询:

搜索引擎将在日志文件中记录用户每次搜索时使用的所有搜索字符串。 每个搜索字符串的长度为1-255个字节。 假设当前有1000万条记录,将这些查询列进行重复读取比较

是的,总数是1千万,但除去重复和,在3百万个以下。 查询字符串的重复程度越高,表示执行查询的用户越多,越受欢迎。 请统计最受欢迎的10个查询

串行,使用的内存不能超过1G。

2 .字符串的最大公共前缀

树使用多个字符串的公共前缀来节省存储空间。 相反,如果将大量字符串保存在一个树中,则可以快速获取特定字符串的公共前缀。 例如:

1 )给出n个小写字母字符串和q个问题。 即,某两个字符串的最长公共前缀的长度是什么? 解决方案:

首先,创建对应于所有字符串的字母树。 此时,可以知道针对2个串的最长共同前缀的长度,也就是它们所属节点的共同祖先的数量,因此,问题转化为离线(Offline )的最近共同祖先(Least Common Ancestor,简称LCA )问题

最近的公共祖先问题也是一个经典问题,方法包括:

1 .利用合并,可以采用经典的Tarjan算法;

2 .求出字母树的Euler Sequence,可以转移到经典的最小值查询(Range Minimum Query,简称RMQ )问题。

3 .排序

树是一个多叉树,当您第一次遍历整个树时,它会按字典顺序对相应的字符串进行排序。

例如,列举n个只由相互不同的一个单词构成的英文名,按照词典顺序从小到大排列输出。

4作为其他数据结构和算法的辅助结构

后缀树、AC机器人等。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。