php 字典树,关于php:数据结构PHP-字典树Trie的实现
这篇文章介绍一下字典树的实现原理,又称单词查找树、Trie树,是一种树形构造,是一种哈希树的变种。典型利用是用于统计,排序和保留大量的字符串(但不仅限于字符串),所以常常被搜索引擎零碎用于文本词频统计。它的长处是:利用字符串的公共前缀来缩小查问工夫,最大限度地缩小无谓的字符串比拟,查问效率比哈希树高。
1.字典树(Trie)示意图
【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年99元
2.节点定义
class Node{
public $isWord;
public $value;//能够存储示意其余信息
public $next; //这是一颗 Map 树,指向其余 25 个字母
public function __construct(){
$this->next = new BinarySearchTreeMap();
}
}
3.Trie 字典树类定义
如下定义了一个字典树(Trie),其中add() 办法能够向 字典树 中增加单词,contains() 能够查问 字典树(Trie) 中是否蕴含某个单词,isPrefix() 办法能够判断字典树上是否有指定字符串前缀的单词:
require $root . "/Map/BinarySearchTreeMap.php";
/**
* 字典树
* Class Trie
*/
class Trie
{
private $root = null;
private $size;
public function __construct() {
$this->root = new TrieNode();
}
/**
* 向字典树中增加
* @param string $word向字段树中增加元素
*/
public function add(string $word, $value) {
$node = $this->root;
for ($i = 0; $i < strlen($word); $i++) {
$c = $word[$i];
if ($node->next->get($c) == null) {
$node->next->add($c, new TrieNode($value));
}
$node = $node->next->get($c);
}
if (!$node->isWord) {
$node->isWord = true;
$this->size++;
}
}
/**
* 查看单词 word 是否存在 Trie 树中
* @param $word
*/
public function contains($word) {
$node = $this->root;
for ($i = 0; $i < strlen($word); $i++) {
$c = $word[$i];
if ($node->next->get($c) == null) {
return false;
}
$node = $node->next->get($c);
}
if ($node->isWord) {
return true;
} else {
return false;
}
}
/**
* 获取字段树节点信息
* @param $word
*/
public function get($word) {
$node = $this->root;
for ($i = 0; $i < strlen($word); $i++) {
$c = $word[$i];
if ($node->next->get($c) == null) {
return null;
}
$node = $node->next->get($c);
}
return $node->value;
}
/**
* 判断某个字符串是否为单词前缀
* @param string $prefix
* @return bool
*/
public function isPrefix(string $prefix) {
$node = $this->root;
for ($i = 0; $i < strlen($prefix); $i++) {
$c = $prefix[$i];
if ($node->next->get($c) == null) {
return false;
}
$node = $node->next->get($c);
}
return false;
}
public function getSize() {
return $this->size;
}
}
class TrieNode
{
public $isWord = false;
public $next;
public $value = null;
public function __construct($value = null) {
$this->value = $value;
$this->next = new BinarySearchTreeMap();
}
}
4.输入演示
require 'Trie.php';
$trie = new Trie();
$trie->add('qsx',123);
$trie->add('dog',456);
$trie->add('cat',789);
$trie->add('else',111);
$trie->add('good',111);
var_dump($trie->contains('qsx'));
var_dump($trie->contains('dog'));
var_dump($trie->contains('aaaa'));
var_dump($trie->contains('ddd'));
var_dump($trie->get('qsx'));
var_dump($trie->get('cat'));
var_dump($trie->get('dog'));
var_dump($trie->get('good'));
var_dump($trie->isPrefix('go'));
var_dump($trie->isPrefix('goo'));
var_dump($trie->isPrefix('goop'));
代码仓库 :https://gitee.com/love-for-po…
扫码关注爱因诗贤
php 字典树,关于php:数据结构PHP-字典树Trie的实现相关推荐
- 树的结构 数据结构_段树| 数据结构
树的结构 数据结构 What is a segment tree? 什么是段树? A segment tree is a full binary tree where each node repres ...
- LSM树——Log-Structured Merge-Tree数据结构、LSM树设计思想、LSM的数据写入操作、LSM的数据查询操作
LSM树数据结构 简介 传统关系型数据库,一般都选择使用B+树作为索引结构,而在大数据场景下,HBase.Kudu这些存储引擎选择的是LSM树.LSM树,即日志结构合并树(Log-Structured ...
- 英文字典。怎样设计数据结构
发信人: playboyer (cuckoo), 信区: Algorithm 标 题: Re: 再问个N久前的面试题 发信站: 水木社区 (Thu Dec 6 20:16:08 2007), 站内 ...
- [数据结构] 常用的树型结构
这篇文章写得不错原文链接: 数据结构中各种树 - xin Tech - 博客园 数据结构中各种树 阅读目录 1. 二叉树 2. 二叉查找树 3. 平衡二叉树 3.1 平衡查找树之AVL树 3.2 平衡 ...
- 分门别类刷leetcode——高级数据结构(字典树,前缀树,trie树,并查集,线段树)
目录 Trie树(字典树.前缀树)的基础知识 字典树的节点表示 字典树构造的例子 字典树的前序遍历 获取字典树中全部单词 字典树的整体功能 字典树的插入操作 字典树的搜索操作 字典树的前缀查询 字典树 ...
- 数据结构之字典树Trie
文章目录 Trie 字典树 前缀树 什么是Trie 基本概念 基本性质 应用场景 优点 手写一个trie Trie字典树的前缀查询 实现Trie(前缀树) LeetCode208 添加与搜索单词 - ...
- 基础数据结构(二):字典树、并查集、堆、哈希表、字符串的哈希方式、STL的常见容器及其接口
文章目录 一.字典树Trie 1 原理 2 Trie字符串统计 3 [LeetCode 208. 实现 Trie (前缀树)](https://leetcode-cn.com/problems/imp ...
- 【数据结构】字典树TrieTree图文详解
问题引入 现在,我给你n个单词,然后进行q次询问,每一次询问一个单词b,问你b是否出现在n个单词中,你会如何去求呢? 暴力搜索?但是我们如果这么做的话时间复杂度一下就高上去了.大家都是成熟的ACMer ...
- 【前缀树】C++ 数据结构 字典树
之前有段时间力扣天天出字典树,当时写得特别熟练,几个月没做都忘得差不多了--今天又出了相关题目,正好复习一下. 文章目录 一.前缀树是什么? 二.实现前缀树 三.例题:添加与搜索单词 总结 一.前缀树 ...
最新文章
- CvBlobTrackerCC 多目标跟踪算法简析
- c语言exit在哪个头文件_C语言函数执行成功时,返回1和返回0,究竟哪个好?
- 西安java招聘_西安招聘 | 陕西安控科技公司招聘(员工宿舍、节日福利、餐补)...
- 区块链80%项目靠同一个故事拿钱,但标准链说最坏的时机就是好的开始
- 七十五、React环境搭建,目录文件分析和JSX
- RS(2)--从文本数据到用户画像
- 承担集团数万应用、研发人员日常工作,阿里持续交付平台的设计、迭代之道... 1
- html5自动旋转图片,HTML5画布旋转图片
- LANMP架构----------------------mysql(2)
- 如何将视频网站的视频下载为mp4格式
- 大四去NTT面试软件实习生的个人总结
- 如何做到像使用 LaTeX 那样优雅地使用 Word?
- js-beautify-html配置,HTML-Beautify.js学习
- ckplayer(超酷网页视频播放器)
- python语音验证码识别_基于Python的手机语音验证码api调用代码实例
- 祝学校计算机系的新年贺词,计算机工程学院 2019祝福情景剧
- win10修改用户名_ADAMS2020中/英版软件下载和安装教程|兼容WIN10
- 学学这五招,打造自媒体短视频
- 先科n612打不开但是充电还是会亮红灯
- windows2016安装证书管理器、IIS配置自签名证书、导出证书、证书.pfx转化为.crt和.key