TheCAT Project

 
« 上一篇: 粗略的接口描述 下一篇: 好慢的blog啊 »
waitingboy @ 2006-04-07 17:56


搜索部分的核心算法
create table ***(
keyword varchar(20);
BinaryStream BinaryStreamType;
);
BinaryStream is an vector of
 struct {
  FileId :FileIdType // such as int(10);
  index  :SmallInt; //记录了 keyword在FileNameOf(FileId)中的位置 ,
           //如果FileNameOf (FileId)中多次包含了keyword这个词,则将 index设为零
           //sample: "ld"在"world"中的位置为 4
           // so we set the index 4
  }
and the vector is ordered by FileId      //*** this is very important

假设存在这样一个文件名"HelloWorld" 并设其fileid 为 FileIdOf("helloworld")
当我们搜索"world"这个词时,
我们就取出 "wo" "rl" "ld" 分别对应的BinaryStreamOf("wo") , BinaryStreamOf("rl"),BinaryStreamof("ld")
从中我们发现了 FileIdOf("helloworld") 是 这三个 BinaryStream 的交集中的元素
并且 index("wo",FileIdOf("helloworld"))=6;
   index("rl",FileIdOf("helloworld"))=8;
   index("ld",FileIdOf("helloworld"))=9;
   他们之间的差满足一定的关系,相信大家一眼就可以看出
这样我们就可以确定这个FileId 对应的那个 FileName一定含有 "world"这个词,而不是"worrld",”or wo ld" 之类的词

前面提到过 fileid要按大小顺序排列
这样的作用是取交之时 比较方便 ,时间复杂度为 length(vector("wo"))+length(vector("rl"))+length(vector("ld")
也就是说只要对vector 进行一次遍历就够了






评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定

网志分类
所有网志 (19)
日历

站内搜索
友情链接
· 我的歪酷 非非共享界

订阅 RSS

0004794

歪酷博客