• javascript实现字典树trie


    Trie Tree 简介

    Trie Tree,又称单词字典树、查找树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。

    性质

    它有3个基本性质:

    1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。
    2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
    3. 每个节点的所有子节点包含的字符都不相同。

    Trie Tree 结构

     
    Trie Tree
    //javascript实现字典树trie,简单的实现下
    class TrieNode {
        constructor(value){
            this.value = value; //value为单个字符
            this.num=1;
            this.deep=0;//根节点默认0
            this.son=[];
            this.isEnd=false;
        }
        findNode(value){
            for(let i=0;i<this.son.length;i++){
                const node=this.son[i]
                if(node.value == value){
                    return node;
                }
            }
            return null;
        }
    }
    class Trie {
        constructor(){
            this.root=new TrieNode(null);
            this.size=1;//一开始的时候只有根节点这一个节点
        }
        insert(str){
            let node=this.root;
            for(let c of str){
    
                let snode = node.findNode(c);
                if(snode==null){
                    snode=new TrieNode(c)
                    snode.deep=node.deep+1;
                    node.son.push(snode);
                }else{
                    snode.num++;//有N个字符串经过它
                }
                node=snode;
    
            }
            //如果当前的node已经是一个word,则不需要添加
            if (!node.isEnd) {
                this.size++;
                node.isEnd = true;
            }
        }
        has(str){
            let node=this.root;
            for(let c of str){
                const snode=node.findNode(c)
                if(snode){
                    node=snode;
                }else{
                    return false;
                }
            }
            return node.isEnd;
        }
    }
    
    //demo
    const nt=new Trie()
    nt.insert('name');
    nt.insert('word');
    nt.insert('happy');
    nt.insert('trie');
    
    // console.log(nt.root['d'])
    console.log(nt.has('has'))
    console.log(nt.has('trie'))
    console.log(nt.has('word'))
    

      

  • 相关阅读:
    gdal source code c++ make windows
    libjpeg安装和使用
    window 安装gdal和python
    gdal和python在windows上的安装
    将博客搬至CSDN
    ue4 Worldmachine 结合使用
    织梦学习
    前端 css html js javascript jquery
    jquery 表单验证插件
    gif动图生成
  • 原文地址:https://www.cnblogs.com/caoke/p/10828895.html
Copyright © 2020-2023  润新知