海运的博客

PHP实现Trie结构

发布时间:December 24, 2014 // 分类:PHP // 1 Comment

  class Trie{
  public $tree = array();

  public function insert($str){
    $count = strlen($str);
    $T = &$this->tree;
    //关联数组递归各个字符,无则新建
    for($i = 0; $i < $count; $i++){
      $c = $str[$i];
      if (!isset($T[$c]))
        $T[$c] = array();  
      $T = &$T[$c];
    }
  }

  public function remove($chars){
    if($this->find($chars)){    
      $count = strlen($chars);
      $T = &$this->tree;
      for($i = 0;$i < $count;$i++){
        $c = $chars[$i];
        if(count($T[$c]) == 1){     
          unset($T[$c]);
          return true;
        }
        $T = &$T[$c];
      }
    }
  }

  public function find($chars){
    $count = strlen($chars);
    $T = &$this->tree;
    //循环遍历各个字符,如无则返回false
    for($i = 0;$i < $count;$i++){
      $c = $chars[$i];
      if(!array_key_exists($c, $T)){
        return false;
      }
      $T = &$T[$c];
    }
    //否则返回找到
    return true;
  }
}
$t = new Trie();
$t->insert('str');
var_dump($t->find('str'));

更多:
https://github.com/fran6co/phptrie
http://kaiserleib.com/archives/63
http://www.cnblogs.com/endsock/p/3584161.html

标签:none

有一条 关于" PHP实现Trie结构 "的评论

  1. 1

    第9行 $chars 应该为 $str

发表评论

分类
最新文章
最近回复
  • spartan2: https://dashboard.hcaptcha.com/welcome_accessib...
  • 海运: 应该能,在购买页面先手工跳过cf机器验证,后续一定时间内不更换ip应该不会再次验证。
  • spartan: 大佬斯巴达开启了CF的机器识别验证,请问插件能自动跳过吗? 另外这个脚本有没有简单使用说明,新...
  • vincent: 膜拜大佬
  • 海运: proxy-header或proxy_protocol
  • liangjw: 如果是 内部调用 或者 中间存在 代理 而上一个代理又在内网 ,那怎么处理来自代理私有IP?
  • chainofhonor: 感谢,用dnsmasq设置自动判断BIOS和UEFI成功了
  • 海运: 不好意思,这个是很多年前的,现在也许已经不适用,我现在也不用多线了。
  • CQ: -m state --state NEW 替换成-m conntrack --ctstate NEW
  • CQ: 你好,我入站已经成功分流,但是不知道出站怎么设置,PREROUTING替换成POSTROUTI...