广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang实现Trie(前缀树)的示例
  • 838
分享到

Golang实现Trie(前缀树)的示例

Golang前缀树Golang实现Trie 2023-01-03 12:01:41 838人浏览 薄情痞子
摘要

目录定义问题描述说明:实现思路:定义 前缀树是N叉树的一种特殊形式。通常来说,一个前缀树是用来存储字符串的。前缀树的每一个节点代表一个字符串(前缀)。每一个节点会有多个子节点,通往不

定义

前缀树是N叉树的一种特殊形式。通常来说,一个前缀树是用来存储字符串的。前缀树的每一个节点代表一个字符串(前缀)。每一个节点会有多个子节点,通往不同子节点的路径上有着不同的字符。子节点代表的字符串是由节点本身的原始字符串,以及通往该子节点路径上所有的字符组成的。

下面是前缀树的一个例子:

在这里插入图片描述

在上图示例中,我们在节点中标记的值是该节点对应表示的字符串。例如,我们从根节点开始,选择第二条路径 ‘b’,然后选择它的第一个子节点 ‘a’,接下来继续选择子节点 ‘d’,我们最终会到达叶节点 “bad”。节点的值是由从根节点开始,与其经过的路径中的字符按顺序形成的。

值得注意的是,根节点表示空字符串。

前缀树的一个重要的特性是,节点所有的后代都与该节点相关的字符串有着共同的前缀。这就是前缀树名称的由来。

我们再来看这个例子。例如,以节点 “b” 为根的子树中的节点表示的字符串,都具有共同的前缀 “b”。反之亦然,具有公共前缀 “b” 的字符串,全部位于以 “b” 为根的子树中,并且具有不同前缀的字符串来自不同的分支。

前缀树有着广泛的应用,例如自动补全,拼写检查等等。我们将在后面的章节中介绍实际应用场景。

问题描述

实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。

示例:

Trie trie = new Trie();

trie.insert("apple");
trie.search("apple");   // 返回 true
trie.search("app");     // 返回 false
trie.startsWith("app"); // 返回 true
trie.insert("app");   
trie.search("app");     // 返回 true

说明:

你可以假设所有的输入都是由小写字母 a-z 构成的。
保证所有输入均为非空字符串。

实现思路:

由于所有输入都是小写字母构成,可以用桶的方式实现,虽然有空间浪费,但是速度最快。

同时要实现搜索词和搜索词前缀。考虑加入布尔标识是否是一个词。但插入词的时候,到词的最后一个字母时,将该节点布尔设为true 代码:

type Trie struct {
	isWord   bool
	children [26]*Trie
}


func Constructor() Trie {
	return Trie{}
}


func (this *Trie) Insert(word string) {
	cur := this
	for i, c := range word {
		n := c - 'a'

		if cur.children[n] == nil {
			cur.children[n] = &Trie{}

		}
		cur = cur.children[n]
		if i == len(word)-1 {
			cur.isWord = true
		}

	}
}


func (this *Trie) Search(word string) bool {
	cur := this
	for _, c := range word {
		n := c - 'a'
		if cur.children[n] == nil {
			return false
		}
		cur = cur.children[n]
	}
	return cur.isWord
}


func (this *Trie) StartsWith(prefix string) bool {
	cur := this
	for _, c := range prefix {
		n := c - 'a'
		if cur.children[n] == nil {
			return false
		}
		cur = cur.children[n]
	}
	return true
}


到此这篇关于golang实现Trie(前缀树)的示例的文章就介绍到这了,更多相关Golang 前缀树内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Golang实现Trie(前缀树)的示例

本文链接: https://www.lsjlt.com/news/176488.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Golang实现Trie(前缀树)的示例
    目录定义问题描述说明:实现思路:定义 前缀树是N叉树的一种特殊形式。通常来说,一个前缀树是用来存储字符串的。前缀树的每一个节点代表一个字符串(前缀)。每一个节点会有多个子节点,通往不...
    99+
    2023-01-03
    Golang 前缀树 Golang实现Trie
  • 前缀树golang实现
    前缀树(Trie)是一种数据结构,主要用于字符串的存储与匹配。在本文中,我们将介绍如何使用 Golang 实现前缀树。什么是前缀树?前缀树,也叫字典树,是一种树形数据结构,用于存储字符串集合,主要用于在大量文本中高效地查找某个字符串。与其他...
    99+
    2023-05-14
  • Python容错的前缀树实现中文纠错
    目录介绍实现参考介绍 本文使用 Python 实现了前缀树,并且支持编辑距离容错的查询。文中的前缀树只存储了三个分词,格式为 (分词字符串,频率) ,如:('中海晋西园', 2)、('中海西园', 24)、('中南...
    99+
    2022-06-02
    Python 中文纠错
  • SpringBoot使用前缀树过滤敏感词的方法实例
    目录一、前缀树二、敏感词过滤器总结一、前缀树 一般设计网站的时候,会有问题发布或者是内容发布的功能,这些功能的有一个很重要的点在于如何实现敏感词过滤,要不然可能会有不良信息的发布,或...
    99+
    2022-11-12
  • C++实现中缀转后缀的示例详解
    单位数加减乘除 例如:2+3*(4-9) 定义一个栈内优先级 运算符号优先级+、-3*、/5(1)6#0 定义一个栈外优先级 运算符号优先级+、-4*、/2(6)1#0 整个过程如下...
    99+
    2022-11-13
  • 怎么用Python容错的前缀树实现中文纠错
    这篇文章主要介绍“怎么用Python容错的前缀树实现中文纠错”,在日常操作中,相信很多人在怎么用Python容错的前缀树实现中文纠错问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python容错的前缀树...
    99+
    2023-06-20
  • Golang栈结构和后缀表达式实现计算器示例
    目录引言问题中缀、后缀表达式的计算人利用中缀表达式计算值计算机利用后缀表达式计算值计算后缀表达式的代码实现中缀表达式转后缀表达式转换过程转换的代码实现总结引言 只进行基本的四则运算,...
    99+
    2022-11-13
  • Java实现Treap树的示例代码
    目录Treap树数据结构遍历查询增加删除完整代码Treap树 Treap树是平衡二叉搜索树的一种实现方式,但它不是完全平衡的。平衡二叉搜索树的实现方式还有AVL树、红黑树、替罪羊树、...
    99+
    2022-11-13
  • C++实现AVL树的示例详解
    目录AVL 树的概念AVL 树的实现节点的定义接口总览插入旋转AVL 树的概念 也许因为插入的值不够随机,也许因为经过某些插入或删除操作,二叉搜索树可能会失去平衡,甚至可能退化为单链...
    99+
    2023-03-03
    C++实现AVL树 C++ AVL树
  • Golang操作Kafka的实现示例
    目录一.使用库说明二.Kafka Producer发送消息三.Kafka Consumer消费消息一.使用库说明 Golang中连接kafka可以使用第三方库:github.com/...
    99+
    2023-02-19
    Golang操作Kafka Golang Kafka
  • C语言圣诞树的实现示例
    你们要的圣诞树它来啦! 快去送给心爱的人吧! 效果如下: #define _CRT_SECURE_NO_WARNINGS 1 #include <math.h> #...
    99+
    2022-11-12
  • GoLang桥接模式的实现示例
    桥接模式是一种结构型设计模式,通过桥接模式可以将抽象部分和它的实现部分分离。这看着有点儿奇怪,接下来会作详细说明。 桥接模式建议将一个较大的类拆分成两中角色。 抽象角色 - 抽象角色...
    99+
    2022-11-12
  • Java实现树形结构的示例代码
    目录前言数据库表结构实现思路具体代码1、造数据,和数据库表数据一致2、树型结构实体类前言 由于业务需要,后端需要返回一个树型结构给前端,包含父子节点的数据已经在数据库中存储好,现在需...
    99+
    2022-11-13
  • golang Gin上传文件返回前端及中间件实现示例
    目录上传文件文件返回给前端中间件中间件调用两种方式单个中间件多个中间件上传文件 package main import ( "fmt" "github.com/gin-gonic...
    99+
    2022-11-13
  • golang原生实现JWT的示例代码
    目录获取Token解析Token实际使用测试结果结语JWT(JSON Web Token)是一种基于JSON的安全令牌,可以用于在不同系统之间传输认证信息。在Go中实现JWT验证,可...
    99+
    2023-05-19
    golang实现JWT golang JWT
  • golang gorm的关系关联实现示例
    目录1. 关联1.1. 属于1.2. 包含一个1.3. 包含多个1.4. 多对多1.5. 多种包含1.6. 关联模式1. 关联 1.1. 属于 // `User`属于`Profile...
    99+
    2022-11-13
  • Golang 分割字符串的实现示例
    目录1.按空格分割2.按字符/字符串分割3.按多个字符分割4.按多个字符串分割5.其他分割函数6.go-huge-util参考文献在开发过程中,很多时候我们有分割字符串的需求,即把一...
    99+
    2023-05-17
    Golang 分割字符串
  • Golang实现单链表的示例代码
    目录1. 定义节点2. IsEmpty():3. Length():4. AddFromHead():5. AddFromTail():6. Insert()7. Delet ...
    99+
    2023-03-15
    Golang 单链表
  • java 实现简单圣诞树的示例代码
    以下是一个简单的Java代码示例,实现了一个简单的圣诞树的打印功能:```javapublic class ChristmasTre...
    99+
    2023-09-16
    java
  • Java实现二分搜索树的示例代码
    目录1.概念2.重点操作3.完整代码1.概念 a.是个二叉树(每个节点最多有两个子节点) b.对于这棵树中的节点的节点值 左子树中的所有节点值 < 根节点 < 右子树的所...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作