当前位置: 首页 > news >正文

一起做网店的类似网站seo研究中心好客站

一起做网店的类似网站,seo研究中心好客站,企业网络营销企业网站建设章节习题,seo服务器选择字典树Trie Tree 字典树也称前缀树,Trie树。在 Elasticsearch 的倒排索引中用的也是 Trie 树。是一种针对字符串进行维护的数据结构。 字典树是对词典的一种存储方式,这个词典中的每个“单词”就是从根节点出发一直到某一个目标节点的路径,…
字典树Trie Tree

字典树也称前缀树,Trie树。在 Elasticsearch 的倒排索引中用的也是 Trie 树。是一种针对字符串进行维护的数据结构。

字典树是对词典的一种存储方式,这个词典中的每个“单词”就是从根节点出发一直到某一个目标节点的路径,路径中每个字母连起来就是一个单词。因此它能利用字符串的公共前缀来节省存储空间。

在这里插入图片描述

红色代表有单词在这里结束,因此需要有个标记。上图可以匹配的字符串有:

a
bz
bd
bdjk
bg
ct
cu
dk

具体实现

package mainimport "fmt"type Node struct {nodeId int  // 节点的全局IDexist  bool // 是否有单词在这里结束
}// 255 表示每个节点最多有255个子节点,因为 ASCII 码目前是两个字节,
// 这样做会有一定的空间浪费,但是便于理解,也可以进一步优化。
type Nodes [255]Node// 每个子节点都是数组结构,最终存储到一个map中。
// 层层查找:nodeId -> indexId -> nodeId -> indexId ->...
type Tree struct {nodes         map[int]NodescurrentNodeId int // 自增ID
}func (tree *Tree) insert(str string) {var parentNode Nodefor i := 0; i < len(str); i++ {subIndex := str[i]if _, ok := tree.nodes[parentNode.nodeId]; !ok {var subNode Nodestree.nodes[parentNode.nodeId] = subNode}nds := tree.nodes[parentNode.nodeId]var needUpdate boolif nds[subIndex].nodeId == 0 {tree.currentNodeId++nds[subIndex].nodeId = tree.currentNodeIdneedUpdate = true}if i == len(str)-1 {nds[subIndex].exist = trueneedUpdate = true}if needUpdate == true {tree.nodes[parentNode.nodeId] = nds}// fmt.Println(string(subIndex), nds[subIndex]) // 调试输出parentNode = nds[subIndex]}
}func (tree *Tree) Exist(str string) bool {var parentNode Nodefor i := 0; i < len(str); i++ {subIndex := str[i]if _, ok := tree.nodes[parentNode.nodeId]; !ok {return false}nds := tree.nodes[parentNode.nodeId]if nds[subIndex].nodeId == 0 {return false}parentNode = nds[subIndex]}return parentNode.exist
}func main() {tree := &Tree{nodes: make(map[int]Nodes),}tree.insert("abcdefg")tree.insert("ab")tree.insert("123456789")tree.insert("123456")fmt.Println(tree.Exist("ab"))        // truefmt.Println(tree.Exist("abc"))       // falsefmt.Println(tree.Exist("123456789")) // truefmt.Println(tree.Exist("123456"))    // true
}
压缩字典树 Radix Tree

Radix树,即基数树,也称压缩字典树,是一种提供key-value存储查找的数据结构。radix tree常用于快速查找的场景中,例如:redis中存储slot对应的key信息、内核中使用radix tree管理数据结构、大多数http的router通过radix管理路由。Radix树在Trie Tree(字典树)的原理上优化过来的。

虽然Trie Tree具有比较高的查询效率,但是从上图可以看到,有许多结点只有一个子结点。这种情况是不必要的,不但影响了查询效率(增加了树的高度),主要是浪费了存储空间。完全可以将这些结点合并为一个结点,这就是Radix树的由来。Radix树将只有一个子节点的中间节点将被压缩,使之具有更加合理的内存使用和查询的效率。

在这里插入图片描述

http://www.hengruixuexiao.com/news/50102.html

相关文章:

  • 保定有哪些做网站的地方搜索引擎营销的案例有哪些
  • 南皮做网站的吸引人的微信软文范例
  • 网站有几类百度有效点击软件
  • 做网站的像素是多少钱自动点击器app
  • html 手机网站开发seminar
  • 查询网站备案直通车优化推广
  • 做网站需要的流程郑州seo关键词优化公司
  • 常州网站制作公司排名汕头seo排名公司
  • 图片素材网站模板免费网络营销软件
  • 网站的流量有什么用发布平台
  • 公司创建aso优化怎么做
  • 重庆网站策划2024新闻热点事件
  • 贵阳哪里做网站珠海百度搜索排名优化
  • 营销型网站推广服务seo是啥意思
  • 织梦做的网站在百度搜索页劫取搜狗搜索引擎推广
  • 郑州网站制作汉狮网络百度免费推广怎么做
  • 商城网站开发与设计关键词排名零芯互联排名
  • 廊坊网站推广seo整站优化方案
  • 视频网站搭建网址安全检测中心
  • 怎么介绍vue做的购物网站项目百度推广账号怎么申请
  • asp.net做网站seo文案范例
  • 石家庄大型网络公司seol英文啥意思
  • 外贸营销型建站公司官网怎么做
  • 蛋糕电子商务网站建设方案全国十大跨境电商公司排名
  • 为什么凡科网做的网站无法搜索百度网站关键词优化
  • 做网页兼职网站有哪些江门关键词优化公司
  • 广州中企动力网站制作网页制作代码模板
  • 郑州有哪些做网站的公司免费seo在线优化
  • 平台网站怎么做seoseo优化上首页
  • 怎么做电脑网站后台免费网站入口在哪