求“字符串比较”的最佳算法,请高手赐教

shdfl 2007-12-15 02:19:08
已经存在N个字符串,(9999<N<99999)
取值规则为:
(1)字符串长度固定
(2)字符串由a-z之间的字符组成,且不存在重复的值

比如:
old_m(001)="cjosuxz"
old_m(002)="dilruyz"
old_m(003)="bgjpuwy"
old_m(004)="adiuwyz"
old_m(005)="ailuvwx"
old_m(006)="bhkosxz"
old_m(007)="fkouvxy"
old_m(008)="eilnptv"
old_m(009)="acdoprs"
old_m(010)="ahirtyz"
old_m(011)="bfjouwx"
old_m(012)="ckpuwxy"
old_m(013)="cjotvyz"
old_m(014)="bfgmnop"
old_m(015)="dipwxyz"
old_m(016)="ajnrtvx"
old_m(017)="egjnptu"
old_m(018)="glquwxz"
old_m(019)="bhilnuy"
old_m(020)="ajkmstx"
..........
old_m(999)="adjnpvz"

==================================================
需要解决的问题如下:

对于任意一新字符串new_m,与倒排序的m(999)-m(001)相比
(1)求字符相同个数的最大值
(2)最大值的那个源字符串old_m(x)的序列号,x=?

用下面的算法可以得到需要的结果:

'----------------------------------------
now_m_l=len(old_m(max_n)) '字符串的固定长度
new_m="bghksux" '需要对比的新字符串的内容
max_n=999 '已经存在的源字符串总个数
new_m_max_n=0 '“新字符串”与“已经存在的N个字符串”里字符相同最多的个数
new_m_max_n_xh=0 '字符相同最多的那个“源字符串”在“已经存在的N个字符串”排第几

for i=1 to max_n
now_i=max_n+1-i '设置倒序
now_m_n=0 '相同字符的个数归0
for ii=1 to now_m_l
if instr(1,mid(old_m(now_i),ii,1),mid(new_m,ii,1),1)>0 then
now_m_n=now_m_n+1
end if
next
if now_m_n=max_n then
new_m_max_n=max_n
new_m_max_n_xh=now_i
exit for
elseif new_m_max_n<now_m_n then
new_m_max_n=now_m_n
new_m_max_n_xh=now_i
end if
next
response.write "字符串" & new_m & "与第" & new_m_max_n_xh & "个字符串相同" & new_m_max_n & "个字符"
’或者将结果存入某个库里
'----------------------------------------

只要不存在字符串完全相同的情况,这个算法的循环次数有 max_n*now_m_l 次
如果有数十万个内容不同的新字符串都要进行对比,需要的时间太长了

请问有没有效率更高的算法?
...全文
112 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bo3235 2007-12-21
  • 打赏
  • 举报
回复
没有人来评论了?郁闷
ASP的人很少注重高效的算法问题的
bo3235 2007-12-20
  • 打赏
  • 举报
回复
如果所有字符排列由A-Z

可以优化的:开始位置检测和结束位置检测,这些都比较实用
bo3235 2007-12-20
  • 打赏
  • 举报
回复
max_n*now_m_l基本上是这个数量级别了
觉得
instr(1,mid(old_m(now_i),ii,1),mid(new_m,ii,1),1)> 0比较浪费时间

如果是海量数据的话(数据很少的话,也不节省时间的)

把new_m拆开成单字符元,然后逐一匹配,至少可以节省2个MID时间
Dogfish 2007-12-20
  • 打赏
  • 举报
回复
使用dictionary object. 很方便。可以把查找范围缩小,提高速度。
hztltgg 2007-12-17
  • 打赏
  • 举报
回复
算法而算法,什么比赛的题目吧?关注
BoyHaXin 2007-12-17
  • 打赏
  • 举报
回复
没有考虑过。同上上
yangtzeu 2007-12-16
  • 打赏
  • 举报
回复
up
braveboy 2007-12-15
  • 打赏
  • 举报
回复
同上
tantaiyizu 2007-12-15
  • 打赏
  • 举报
回复
好奇 。。。

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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