首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

巧用 Trie 树实现搜索引擎关键词提示功能

什么是 Trie 树 Trie 树的实现 如何实现搜索字符串自动提示 再谈 Trie 树 相信大家看了肯定有收获 什么是 Trie 树 Trie 树,又称前缀树,字典树,或单词查找树,是一种树形结构,也是哈希表的变种...如果用 Trie 树的话,能解决以上两个问题,先来看下 trie 树是如何表示的,以以上的一组字符串 a, to, tea, ted, ten, i, in, inn 为例,它们组成的 Trie 树如下...从以上 Trie 树的图解我们可以得出 Trie 树的以下几个特点 根节点不包含字符,除根节点外每个节点只包含一个字符 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。...,现在我们来看下 Trie 树的两个主要操作 根据一组字符串构造 Trie 树 在 Trie 树中查找字符串是否存在 先来看如何根据一组字符串构造 Trie 树,首先如何根据一个单词来构造 Trie 树呢...,遍历字符串,查看每个字符在相应层级的数组位置的元素是否为空即可,如果是,说明不存在,如果不是,则继续遍历字符查找,直到遍历完成,代码如下 /** * 查找字符串是否在原字符串集合中 * @param

2.9K40

Java学习笔记——基本语法

命名规则 由26个英文字母大小写,0-9 ,_或 $ 组成 不可以以数字开头。 不可以使用关键字和保留字,但能包含关键字和保留字。 Java中严格区分大小写,长度无限制。...多单词时每个单词用下划线连接:XXX_YYY_ZZZ 3 数据类型 3.1 基本数据类型 java的整型常量默认为 int 型,声明long型常量须后加’l’或’L’,否则,若数值过大,超过了int的范围...类包含了用来操作数组(比如排序和搜索)的各种方法。...equals():比较两个array是否相等(拥有相同元素个数,且所有对应元素两两相等)。 fill():将值填入array中。 sort():用来对array进行排序。...binarySearch():在排好序的array中寻找元素。 另:System.arraycopy():array的复制。 以上笔记参考尚硅谷Java教程

24130
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL模糊查询再也用不着 like+% 了!

    全文索引(Full-Text Search)是将存储于数据库中的整本书或整篇文章中的任意信息查找出来的技术。它可以根据需要获得全文中有关章、节、段、句、词等信息,也可以进行各种统计和分析。...它在辅助表中存储了单词与单词自身在一个或多个文档中所在位置之间的映射,这通常利用关联数组实现,拥有两种表现形式: inverted file index:{单词,单词所在文档的id} full inverted...: word 是否在文档中出现 word 在文档中出现的次数 word 在索引列中的数量 多少个文档包含该 word 对于 InnoDB 存储引擎的全文检索,还需要考虑以下的因素: 查询的 word 在...stopword 列中,忽略该字符串的查询 查询的 word 的字符长度是否在区间 [innodb_ft_min_token_size,innodb_ft_max_token_size] 内 如果词在...,该字符串包含要搜索的词,它还可以包含指定要求的运算符,例如匹配行中必须存在或不存在某个词,或者它的权重应高于或低于通常情况。

    1.3K30

    实用主义编程规范:JAVA篇

    JAVA代码规范 1.规范说明 此规范包含:避免出现常见恶劣代码的禁令;指导编写合格代码的基本规则 此规范不包含:分析与设计出符合业务需求的代码; 2.基本原则 a)规范代码的原因 写程序的过程中,读代码的时间和写代码的时间只比为...,禁止使用无意义字符串,禁止使用不通用的缩写 代码是必须要被人阅读的,混杂着缩写、拼音、代号的文章就类似解谜游戏,好玩但浪费时间 虽然英语不是母语,但是用英语键盘输入英语单词,是意思表达最准确的而且效率最高的做法...公共类必须是这个文件中的第一个类或接口。...类/接口的声明 iii. 类/接口实现的注释,用/*……*/编写,该注释应包含针对整个类或接口,是怎样实现的大概说明,而这些信息不适合作为文档的一部分。 iv....) 禁止一个方法多于300行 g) 从容器类(Map,ArrayList,Vector,数组等)中获取对象一定要检查是否null值 8.语句 a)简单语句 每行只包括一条语句,禁止出现一行中有两个或以上的分号

    1.2K60

    剑指Offer——Trie树(字典树)

    大家好,又见面了,我是你们的朋友全栈君。 剑指Offer——Trie树(字典树) Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。...假设我要查询的单词是abcd,那么在他前面的单词中,以b,c,d,f之类开头的我显然不必考虑。而只要找以a开头的中是否存在abcd就可以了。...查找分析 在trie树中查找一个关键字的时间和树中包含的结点数无关,而取决于组成关键字的字符数。而二叉查找树的查找时间和树中的结点数有关O(log2n)。...再给出一段文本,文本的每一行也由小写字母构成。判断文本中是否含有任何不良单词。例如,若rob是不良单词,那么文本problem含有不良单词。...尽管这个实现方式查找的效率很高,时间复杂度是O(m),m是要查找的单词中包含的字母的个数。但是确浪费大量存放空指针的存储空间。因为不可能每个节点的子节点都包含26个字母的。

    92210

    MySQL 模糊查询再也不用like+%了

    全文索引(Full-Text Search)是将存储于数据库中的整本书或整篇文章中的任意信息查找出来的技术。它可以根据需要获得全文中有关章、节、段、句、词等信息,也可以进行各种统计和分析。...它在辅助表中存储了单词与单词自身在一个或多个文档中所在位置之间的映射。...: word 是否在文档中出现 word 在文档中出现的次数 word 在索引列中的数量 多少个文档包含该 word 对于 InnoDB 存储引擎的全文检索,还需要考虑以下的因素: 查询的 word 在...stopword 列中,忽略该字符串的查询 查询的 word 的字符长度是否在区间 [innodb_ft_min_token_size,innodb_ft_max_token_size] 内 如果词在...Boolean 布尔搜索使用特殊查询语言的规则来解释搜索字符串,该字符串包含要搜索的词,它还可以包含指定要求的运算符,例如匹配行中必须存在或不存在某个词,或者它的权重应高于或低于通常情况。

    26510

    MySQL 模糊查询再也不用 like+% 了!

    全文索引(Full-Text Search)是将存储于数据库中的整本书或整篇文章中的任意信息查找出来的技术。它可以根据需要获得全文中有关章、节、段、句、词等信息,也可以进行各种统计和分析。...它在辅助表中存储了单词与单词自身在一个或多个文档中所在位置之间的映射,这通常利用关联数组实现,拥有两种表现形式: inverted file index:{单词,单词所在文档的id} full inverted...: word 是否在文档中出现 word 在文档中出现的次数 word 在索引列中的数量 多少个文档包含该 word 对于 InnoDB 存储引擎的全文检索,还需要考虑以下的因素: 查询的 word 在...stopword 列中,忽略该字符串的查询 查询的 word 的字符长度是否在区间 [innodb_ft_min_token_size,innodb_ft_max_token_size] 内 如果词在...,该字符串包含要搜索的词,它还可以包含指定要求的运算符,例如匹配行中必须存在或不存在某个词,或者它的权重应高于或低于通常情况。

    6.5K30

    词向量因何存在:一段往计算机输入文字的历史

    一个词形可以被表征为一个字符串(字符的有序列表),但是比较两个字符串是否相同的计算成本却很高。 在之前,单词往往都会被整数化处理。这样一来,每个词形都会被赋予一个唯一的(或多或少任意的)非负整数值。...这样做的优点是每个词形都以相同大小的空间被存储下来,基于数组的数据结构可以被用来通过词形索引其它的信息(如单词的字符串,对属于该词形的词例进行技术,或者包含单词潜在语义的细节信息的更丰富的数据结构)。...在以上各种情况下,对词形进行离散化处理有一个严重的缺点:有关如何将一个特定的词用作证据,或者是否生成一个输出词例的信息,不能在具有相似特性的单词之间共享。...该结果是根据 56M 条 tweet 生成的,本图中给出了以 00110 二进制串为前缀的簇的层次结构,以及簇中 10 个出现频率最高的单词。树中的中间节点对应于包含后继节点中所有单词的簇。...在语言学中,一个重要的思想是:可以通过相似的方式使用的单词(或表示)可能拥有相同的语义。

    72910

    你可能不知道的字符串分割技巧

    我不懂日语,但你会如何尝试将下面的字符串分割成单词或句子? // I am a cat. My name is Tanuki. '吾輩は猫である。名前はたぬき。'...普通的字符串方法在这里是没有用的,但是Intl JavaScript API 确能解决这个问题。...Intl.Segmenter 来救场 Intl.Segmenter 是一个 JavaScript 对象,用于对文本进行区域设置敏感的分段。它可以帮助我们从字符串中提取有意义的项目,如单词、句子或字形。...granularity 是字符串,表示分段的粒度。它可以是 "grapheme"(字形)、"word"(单词)或 "sentence"(句子)之一。..., breakType: "", breakIndex: 31 } Intl.Segmenter 对象还有其他一些有用的方法,比如 breakType,用于检索分段的类型(例如,句子的末尾是否包含句号)

    91020

    搜索引擎背后的经典数据结构和算法

    实际可能要分配 20 个元素的空间,以避免哈希冲突),同时不管是用链式存储还是用红黑树来处理冲突,都要存储指针,各种这些加起来所需内存可能会超过 100 G,再加上冲突时需要在链表中比较字符串,性能上也是一个损耗...从中可以看出 Trie 树具有以下性质: 根节点不包含字符,除根节点外的每一个子节点都包含一个字符 从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串 每个节点的所有子节点包含的字符互不相同...通常在实现的时候,会在节点结构中设置一个标志,用来标记该结点处是否构成一个单词(关键字)。...树中查找,以上文中提到的 Trie 树为例,则我们输入「te」时,由于以「te」为前缀的单词有 ["tea","ted","ted","ten"],则在搜索引擎的搜索提示框中就可以展示这几个字符串以供用户选择...上文提到,Trie 树实现的时候,可以在节点中设置一个标志,用来标记该结点处是否构成一个单词,也可以把这个标志改成以节点为终止字符的搜索字符串个数,每个搜索字符串在 Trie 树遍历,在遍历的最后一个结点上把字符串个数加

    77410

    大厂如何过滤垃圾短信?

    把每个号码看作一个字符串,且假设平均长度16字节,则存储50万个电话号码,大约需10MB内存。对手机,这点内存消耗也可接受。 但若黑名单中的电话号码很多?如500万。再用散列表需约100MB。...预先设定一些规则,若某条短信符合这些规则,就可判定它是垃圾短信: 短信包含特殊单词(或词语),如一些非法、淫秽、反动词语 短信发送号码是群发号码,非正常手机号,如+60389585 短信中包含回拨的联系方式...,如手机号码、微信、QQ、网页链接等,因为群发短信的号码一般都是无法回拨 短信格式花哨、内容很长,比如包含各种表情、图片、网页链接等 符合已知垃圾短信的模板。...不过,我只是给出了一些制定规则的思路,具体落实到执行层面,其实还有很大的距离,还有很多细节需要处理。比如,第一条规则中,如何定义特殊单词;第二条规则中,我们该如何定义什么样的号码是群发号码等等。...这n个单词就是一组特征项,全权代表这个短信。因此,判定一个短信是否是垃圾短信这样一个问题,就变成了,判定同时包含这几个单词的短信是否是垃圾短信。

    1.7K30

    特征工程(二) :文本数据的展开、过滤和分块

    如何将字符串转换为一系列的单词?这涉及解析和标记化的任务,我们将在下面讨论。 解析和分词 当字符串包含的不仅仅是纯文本时,解析是必要的。...例如,如果原始数据是网页,电子邮件或某种类型的日志,则它包含额外的结构。人们需要决定如何处理日志中的标记,页眉,页脚或无趣的部分。如果文档是网页,则解析器需要处理 URL。...字符串对象 字符串对象有各种编码,如 ASCII 或 Unicode。纯英文文本可以用 ASCII 编码。 一般语言需要 Unicode。...在计算自然语言处理中,有用短语的概念被称为搭配。用 Manning 和 Schütze(1999:141)的话来说:“搭配是一个由两个或两个以上单词组成的表达,它们对应于某种常规的说话方式。”...我们必须找到更聪慧的统计数据才能够轻松挑选出有意义的短语。关键的想法是看两个单词是否经常出现在一起。回答这个问题的统计机制被称为假设检验。 假设检验是将噪音数据归结为“是”或“否”的答案。

    2K10

    6个实例,8段代码,详解Python中的for循环

    使用split()函数做单词比较 清单4 的Compare2.py说明了如何通过split()函数将文本字符串中的每个单词与另一个单词进行比较。...使用split()函数比较文本字符串 清单7 的CompareStrings1.py说明了如何判断一个文本字符串中的单词是否出现在另一个文本字符串中。...text1和text2,然后通过条件逻辑判断字符串text2是否包含了text1(并输出相应打印信息)。...清单7 的后半部分通过一个循环遍历字符串text1中的每个单词,并判断其是否出现在text2中。...清单7 的输出如下所示: 05 用基础的for循环显示字符串中的字符 清单8 的StringChars1.py说明了如何打印一个文本字符串中的字符。

    2.1K20

    正则表达式来了,Excel中的正则表达式匹配示例

    在单元格中查找特定字符串时,FIND函数和SEARCH函数非常方便。如何知道单元格中是否包含与给定模式匹配的信息?显然,可以使用正则表达式。...如何使用正则表达式在Excel中匹配字符串 当所有要匹配的字符串都具有相同的模式时,正则表达式是理想的解决方案。...例如,要匹配正好由7位数字组成的发票号,可以使用\d{7}。但是,请记住,它将匹配字符串中任何位置的7位数字,包括10位或100位数字。如果这不是要查找的内容,应在两侧放置单词边界\b。...因为电话号码可以在字符串中的任何位置,不一定在最开始的位置,所以会添加*量词来检查后面的每个字符。开头的^和结尾的$锚定确保处理整个字符串。...lemons)向右查找,看前面是否没有单词“lemons”。如果没有“lemons”,则该点与除换行符以外的任何字符匹配。

    22.2K30

    常用的CSS属性大全

    指定一个断字的单词断字字符前的最少字符数 3 hyphenate-character 指定了当一个断字发生时,要显示的字符串 3 hyphenate-lines 表示连续断字的行在元素的最大数目...3 hyphenate-resource 外部资源指定一个逗号分隔的列表,可以帮助确定浏览器的断字点 3 hyphens 设置如何分割单词以改善该段的布局 3 image-resolution...弹性盒子模型(Flexible Box) 属性(旧) 属性 描述 CSS box-align 指定如何对齐一个框的子元素 3 box-direction 指定在哪个方向,显示一个框的子元素...网格(Grid) 属性 属性 描述 CSS grid-columns 指定在网格中每列的宽度 3 grid-rows 指定在网格中每列的高度 3 14....CJK文字的断行规则 3 word-wrap 设置浏览器是否对过长的单词进行换行。

    3.2K30

    朴素贝叶斯算法--过滤垃圾短信

    规则可以有很多,比如: 短信中包含特殊单词(或词语),比如一些非法、淫秽、反动词语等; 发送号码是群发号码,非正常的手机号码,比如+60389585; 短信中包含回拨的联系方式,比如手机号码、微信、QQ...、网页链接等,因为群发短信的号码一般都是无法回拨的; 短信格式花哨、内容很长,比如包含各种表情、图片、网页链接等; 符合已知垃圾短信的模板。...比如,第1条规则中,我们该如何定义特殊单词;第2条规则中,我们该如何定义什么样的号码是群发号码等等。 这里只讲一下,如何定义特殊单词?...因此,判定一个短信是否是垃圾短信,就变成了,判定同时包含这几个单词的短信是否是垃圾短信。 不过,这里并不像基于规则的过滤器那样,非黑即白。我们使用概率,来表征一个短信是垃圾短信的可信程度。...其中,P(Wi 出现在短信中 | 短信是垃圾短信)表示垃圾短信中包含Wi 这个单词的概率有多大。 P(短信是垃圾短信)把样本中垃圾短信的个数除以总样本短信个数。

    1.2K30

    【愚公系列】2023年11月 数据结构(十)-Trie树

    链表(Linked List):也是一种线性数据结构,它由一系列的节点组成,每个节点包含数据和指向下一个节点的引用。链表的特点是可以动态地插入或删除节点,但访问某个节点时需要从头开始遍历。...Trie树的根节点不存储任何字符,每个节点代表一个字符,每个节点包含一个指向子节点(即下一个字符)的指针数组和一个标识是否为单词结尾的标记。...当插入或搜索一个字符串时,从根节点开始,依次遍历字符串的每个字符,如果存在该字符对应的子节点,继续向下遍历,否则新建一个子节点,并将指针指向该节点。当遍历完整个字符串后,标记最后一个节点为单词结尾。...注意,在这个示例中,我们默认单词只包含小写字母。如果需要支持其他字符集,需要根据情况调整节点数组的大小。...4.应用场景Trie树(又称前缀树或字典树)是一种树形数据结构,用于高效地搜索和插入字符串。Trie树常用于以下场景:字符串的查找和匹配:如文本编辑器中的自动补全、搜索引擎中的单词联想等。

    28912

    SI持续使用中

    保存 单击此按钮可将当前样式表设置保存到新的样式配置文件。该文件将仅包含样式属性,并且不包含可以存储在配置文件中的其他元素。如果加载此配置文件,则仅加载样式属性。...通常,您将在程序中键入标识符的名称,但是您可以在此处键入任何字符串,并且将在项目范围内进行搜索。如果仅键入一个单词,搜索将非常快。 搜索范围 此下拉列表包含文件类型列表。...您可以使用此列表将搜索限制为仅特定类型的文件或仅当前文件。如果“项目窗口”可见,那么您也可以使用此列表指定在“项目窗口”中选择的文件。 搜索方式 您可以从此列表中选择要使用的搜索方法。...单击此按钮可以指定搜索结果中包含哪些信息。 搜索选项 区分大小写 指定搜索是否区分大小写。 全字 对于“查找引用”模式,此选项始终处于启用状态。...例如,如果您选择一个结构的成员并查找其引用,则搜索结果将仅包含对该特定结构的该特定成员的引用-而不仅仅是任何等效的字符串。

    3.7K20
    领券