一种时间复杂度为 log(n) 的模糊查询算法!

Terark-CTO-雷鹏
博客专家认证
2001-11-02 09:02:19

本算法为本人在痛苦中摸索出来!应该有前人早已得出相同或类似算法。

本算法不打算写出,只写出它的时间和空间复杂度分析!这个算法可以用折半查找实现,也可以用平衡树查找实现。本人认为用平衡树最为完美,可以动态加入记录,又可以在最坏情况下用 log(n) 的时间复杂度查出结果。为了描述简单而又不失算法的精髓,暂时不考虑有重复记录的情况。
——本人在有重复记录,但仍是有序的集合中,可以用折半法和平衡树实现快速查找。

如果一个数据库有 n(如 n=10^8) 篇文章,每篇文章有 m(如 m=1^3) 个字符,那么在这个数据库中查询任何一个字符串,所用时间只有 m*log2(n) ,还有一个算法,如果用户输入的字符串只由无空格的单词组成,而每个单词平均只有 k (如
k=8) 个字符,那么,时间复杂度可以进一步降至 k*log2(m*n) .

不过,第一种算法需要 m*n*addressbytes 的空间代价,
或相当于 addressbyets 倍于文章自身的空间代价。

第二种算法需要 m*n*(addressbyte+ceil((log2(k))/8)) 的空间代价,
或相当于 ceil(addressbyets)+ceil(ceil(log2(k))/8)
倍于文章自身的空间代价。

如果 n=10^8 , m=10^3 , k=8 , addressbytes = 4
则对第一种算法:
时间复杂度为: 10^3*log2(10^8) = 26576
空间代价为 : 10^11 * 4 = 4*10^11 ,
或相当于 4 倍于文章自身的空间代价。

对第二种算法:
时间复杂度为: 8*log2(10^3*10^3) = 293
空间代价为 : 10^11 * 4+375*10^8 =4.00375*10^11
或相当于 4+1=5 倍于文章自身的空间代价。




...全文
244 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
starfish 2001-11-03
  • 打赏
  • 举报
回复
PS:你能自己摸索出这个算法也挺不容易的了,但是指望这个卖钱就不现实了:)
Terark-CTO-雷鹏 2001-11-03
  • 打赏
  • 举报
回复
oh,mygod , starfish 兄,
小弟的英文水平实在太差,http://cora.whizbang.com 上面的单词都不认识!
starfish 2001-11-02
  • 打赏
  • 举报
回复
在这方面成熟的算法很多,现有的一些搜索引擎已经开始使用这些算法进行全文检索了。其主要思想就是预先对内容进行处理,建立某种数据结构(比如检索树,平衡树之类),然后在进行搜索。http://cora.whizbang.com/有很多这方面的论文,你的算法复杂度并不是最优的,性能上看似乎也没有什么特别可取之处。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧