求“字符串比较”的最佳算法,请高手赐教
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 次
如果有数十万个内容不同的新字符串都要进行对比,需要的时间太长了
请问有没有效率更高的算法?