当前位置:首页 > 日记 > 正文

PHP字典树 | Trie树定义与实现方法示例

PHP字典树 | Trie树定义与实现方法示例

本文实例讲述了PHP字典树(Trie树)定义与实现方法。分享给大家供大家参考,具体如下:

Trie树的概念(百度的解释):字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

我的理解是用来做字符串搜索的,每个节点只包含一个字符,比如录入单词"world",则树的结构是:

这时再录入单词"worab",则树的结构为:

所以每个节点必须还要一个字段is_end标识是否为结束单词。比如用户输入wor,搜索所有wor开头的单词,假设现在有一个单词就是wor,从"w"开始检索,当检索到"r"的时候需要判断"r"节点的is_end为true,则把wor加入到结果列表,然后继续往下面检索。

PHP实现代码:

<?phpclass Node{  public $value;         // 节点值  public $is_end = false;    // 是否为结束--是否为某个单词的结束节点  public $childNode = array();  // 子节点  /* 添加孩子节点--注意:可以不为引用函数,因为PHP对象赋值本身就是引用赋值 */  public function &addChildNode($value, $is_end = false){    $node = $this->searchChildNode($value);    if(empty($node)){      // 不存在节点,添加为子节点      $node = new Node();      $node->value = $value;      $this->childNode[] = $node;    }    $node->is_end = $is_end;    return $node;  }  /* 查询子节点 */  public function searchChildNode($value){    foreach ($this->childNode as $k => $v) {      if($v->value == $value){        // 存在节点,返回该节点        return $this->childNode[$k];      }    }    return false;  }}/* 添加字符串 */function addString(&$head, $str){  $node = null;  for ($i=0; $i < strlen($str); $i++) {    if($str[$i] != ' '){      $is_end = $i != (strlen($str) - 1) ? false : true;      if($i == 0){        $node = $head->addChildNode($str[$i], $is_end);      }else{        $node = $node->addChildNode($str[$i], $is_end);      }    }  }}/* 获取所有字符串--递归 */function getChildString($node, $str_array = array(), $str = ''){  if($node->is_end == true){    $str_array[] = $str;  }  if(empty($node->childNode)){    return $str_array;  }else{    foreach ($node->childNode as $k => $v) {      $str_array = getChildString($v, $str_array, $str . $v->value);    }    return $str_array;  }}/* 搜索 */function searchString($node, $str){  for ($i=0; $i < strlen($str); $i++) {    if($str[$i] != ' '){      $node = $node->searchChildNode($str[$i]);      // print_r($node);      if(empty($node)){        // 不存在返回空        return false;      }    }  }  return getChildString($node);}/* 调用测试开始 */$head = new Node;  // 树的head// 添加单词addString($head, 'hewol');addString($head, 'hemy');addString($head, 'heml');addString($head, 'you');addString($head, 'yo');// 获取所有单词$str_array = getChildString($head);// 搜索$search_array = searchString($head, 'hem');// 循环打印所有搜索结果foreach ($search_array as $key => $value) {  echo 'hem' . $value . '<br>'; // 输出带上搜索前缀}

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

相关文章

PHP 进度条函数的简单实例

PHP 进度条函数的简单实例

进度条,简单实例,函数,电脑软件,PHP,PHP 进度条函数的简单实例其实进度条的做法很简单的。网上的一大堆,自己写了一个,哈哈,感觉看起来很有感觉。实例代码:function ShowPercent($now,$total) { $percent = sprintf('%.0f',$now*100/$total)…

PS时间表是如何制作动画的

PS时间表是如何制作动画的

动画,时间表,电脑软件,PS,时间轴动画由ps制作,其实主要使用图层和动画制作步骤的功能很复杂,但效果非常好,把当前的制作过程和截图分享出来,供大家参考,同时也希望大家能分享更多的质量体验。 软件名称:Adobe PS图象处理软件8全绿色中文版软件大…

在Windows XP中配置支持PHP环境的I

在Windows XP中配置支持PHP环境的I

支持,服务器,配置,环境,电脑软件,如果你下载的是安装版的php,安装的时候可以选择使用IIS,安装完毕就会自动配置好IIS。如果你下载的是zip版的,则按照以下步骤配置:1、把PHP-5.2.0 zip(目前最新版本)解压放到 C:\php (你可以选择目录,本例以此说明…

详解php中的implements 使用

详解php中的implements 使用

详解,电脑软件,php,implements,php类中接口的应用关键字是interface、implements了,接口是一种成员属性全部为抽象或常量的特殊抽象类,implements主要是对类名,类所拥有的方法,以及所传参数起约束和规范做用,有点像 abstract 抽象类。类中接口…

Outlook 2013中设置QQ邮箱

Outlook 2013中设置QQ邮箱

设置,邮箱,电脑软件,Outlook,QQ,最近在使用outlook当做桌面邮箱的客户端,做个记录方便自己以后查阅。我使用的是Outlook 2013。1. 点击&ldquo;文件&rdquo;菜单,选择&ldquo;信息&rdquo;,点击&ldquo;添加帐户&rdquo;,进入新帐户添加向导。2. 选择…

powerpoint环形箭头怎么做

powerpoint环形箭头怎么做

图形,方法,循环,箭头,环形,  我们在制作ppt演示文稿的时候,可能需要在其中加入一些循环箭头的效果,那么你知道怎样制作循环箭头图形吗?下面就让小编告诉大家在ppt中怎样制作循环箭头图形,希望能帮到大家。ppt中制作循环箭头图形的方法为了更…

Linux VPS怎么绑定域名建站

Linux VPS怎么绑定域名建站

建站,绑定域名,电脑软件,Linux,VPS,VPS 的环境终于给配置好了,用的军哥的LNMP 0.7版本。不停的重装OS,在环境。这中间辛苦了老和尚啊&hellip;这里做个记录。使用SSH登录VPS输入 /root/vhost.sh出现Please input domain其他的看下图按照下图绑…

服务器CPU利用率100%的常见解决方法

服务器CPU利用率100%的常见解决方法

解决方法,服务器,利用率,常见,电脑软件,  下面介绍导致服务器CPU利用率占用100%的六种常见问题以及其解决方法。1、dllhost进程造成CPU使用率占用100%特征:服务器正常CPU消耗应该在75%以下,而且CPU消耗应该是上下起伏的。出现这种问题的服…

excel2007怎样设置显示标尺excel20

excel2007怎样设置显示标尺excel20

显示,设置,教程,方法,标尺,  Word中&ldquo;标尺&rdquo;工具的作用非常大,也许有人经常用它,也许很少有人用到。俗话说多一技防身不是更好吗。那么下面就由小编给大家分享下调出word2007标尺的技巧,欢迎大家来到学习。word2007将标尺显示出来…

PS雨和雨的产生

PS雨和雨的产生

电脑软件,PS,通过使用:杂项,运动模糊,自定义笔刷和混合模式,我们可以创建一个非常现实的降雨效果。让我们从小编辑器学习。 PS产生一个真正的雨雨效果课程。 1。选择正确的图像是很重要的,如果图像有说服力,最终结果将是如此。 2。如果需要下雨…

excel2007 if函数的使用方法

excel2007 if函数的使用方法

函数,使用方法,电脑软件,  在Excel中录入好数据以后经常需要统计数据,在统计数据中经常需要用到函数做计算,其中IF函数最为常用,如果还不懂得怎么用IF函数的朋友建议来学习一番。接下来是小编为大家带来的excel2007 if函数的使用方法,供大家…

struts中的单例操作和多个示例

struts中的单例操作和多个示例

操作,多个,示例,电脑软件,struts,struts中的单例操作和多个示例 行动在Struts2是多元的,其产生的行动,每一次网络地址访问 公共课pr_action { 公共pr_action(){ System.out.println(创造行动成功!!!!!!!!!!!!!!!!!!!; } 公共空执行(){ } } 运行代码可以看到每一个对…