单词查找树的实现

  单词查找树,即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;   


插入

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;          

查找

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;            

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值