关于搜索,不知道单纯在数据库里能否完成……?欢迎高手参与讨论
Kandy 2004-12-03 09:50:46 命题如下:
有一表里面有几十万景点信息。例如:八仙洞,玉皇阁,香溪洞
今有一段文字如下:
--------------------------------
行程安排:
D1 中午乘火车从西安出发,下午抵达安康。 住安康
D2 上午赴香溪洞风景区,游八仙洞、天梯、玉皇阁,下午赴瀛湖风景区、船有金罗岛、
翠屏岛、岚河漂流。 住安康
D3 早上或中午安康火车站送团。
-------------------------------
希望得到的结果:凡是在景点信息表里有的景点的名字在上面那段文字里都加上<>,也就是在景点名称的两边加上<>,如:<八仙洞>
考虑:
1、如先读取表信息然后循环替换掉那段文字中的对应文字并加上<>是可以完成命题的,但是事实上每加一段文字就循环一遍如此多的记录显然效率极其低下。故此种解决方法不必跟贴。
2、排除1,则只能从那段文字入手,如果考虑景点名称最多为N个字,则须从那段文字的
第1个字到第N个字(查询一下景点表,如符合则加<>),2个字到第N个字(查询表)……一直循环到=N-1为止
第2个字到第N+1个字(查询表),第3个字到第N+1个(字查询表),…… 一直循环到N为止
如果一段文字有X个字
……
则需要循环(N-1)*(X-N+1)次,也就是完成这么多次对表的查询,如结果匹配则替换加<>
例如有这么一段话:
这个只是个测试啊
共8个字
替换“个只”为“<个只>”
替换最大字符为4个字符,这样在限度范围内我也可以替换“只是个”
需要完成的循环如下:
1-4,2-4,3-4
2-5,3-5,4-5
3-6,4-6,5-6
4-7,5-7,6-7
5-8,6-8,7-8
3*5=15次
X个字,最大N个字符
(N-1)*(X-N+1)
如此看来一段200字的10个最大替换字符需要完成对数据库的1719次查询。
--------------------------------------------------------------------
我其实是想实现这样的功能,假如有人发表一篇旅游日记,则在他旅游日记发表的同时,他日记里所写的景点自动加上联接以联结到该景点的介绍文字,他的日记可能会有2000字,按照10个字符,这样完成的查询就有17919次,也是近两万次的查询,开销依旧比较大。
--------------------------------------------------------------------
本来这样的命题我想应该配合其他语言来解决,但是,单纯的靠数据库真的无法解决了吗?有没有除了上述两种方法以外的算法或者类似的二叉树等算法更快更好得完成命题呢?
欢迎跟贴讨论,欢迎UP,欢迎大家学习,毕竟,我觉得这应该是个很实用的东西。