单词查找树的实现

  单词查找树,即trie树,又叫字典树或前缀树,是一种树型结构。用于统计,排序,保存大量的字符串,效率较高,主要是以空间换时间。

  但我们遇到大量的字符串要进行存储,并且要在其中查找某些字符串时,如果用一般数组保存从头到尾扫一遍要O(n)的时间效率,显然这不够好,因为我们多比较了许多无用的字符串, 如果我们能根据字符串前缀排除一些字符串,又可以节省许多时间,这就需要单词查找树。

  单词查找树思想类似于英文字典,根据单词第一个字符进行分类,放在不同的子树中,在根据下一个字符进行分类,放在不同子树中......这就相当于形成了一个二十六叉树,当我们查找某个字符串时从根节点(无字符)出发,如果子树中有该字符串的这一位字符,则查该子树,直到查到叶节点,看是否与待查字符串对应,然后根据结果输出即可,时间效率为O(length(s)),length(s)为字符串长度。


增加节点操作

procedure done(var x:longint);
var i,j:longint;
begin
  len:=len+1; x:=len; g[len]:=false;
end;   
View Code

 

插入

procedure put(s:string);
var i,p,c:longint;
begin
  p:=1;
  for i:=1 to length(s) do
   begin
     c:=ord(s[i])-96;
     if trie[p,c]=0 then done(trie[p,c]);
     p:=trie[p,c];
   end;
  v[p]:=v[p]+1;
end;          
View Code

    
查找

function get(s:string):longint;
var i,p,c:longint;
begin
  p:=1;
  for i:=1 to length(s) do
   begin
     c:=ord(s[i])-96;
     p:=trie[p,c];
     if p=0 then begin break; end;
   end;
  if (p>0)and(g[p]=false) then  get:=v[p];
end;            
View Code

 

转载于:https://www.cnblogs.com/qtyytq/p/4265756.html

你可能感兴趣的:(单词查找树的实现)