数组减少维数的问题

taochunsong 2008-11-26 06:34:50
有一个数组比较的问题,我觉得效率有点低,能不能有改进的算法
比如
for i= 1 to 1000
for j=1 to 100

if a(i)=b(j) then
表达式
end if
next
next

实际上在比较的时候,如if表达式成立的时候,b(j)这个值就不会再参加下次运算了,也就是此次b(j)这个数组就少掉一个值参加比较了

如果按照上面的算法就要比较1000×100次了。

能不能有办法改进,可以算的效率搞一点的,我想能不能把b(j)的维数减少1,被扣掉的后面的就补到前面来。
...全文
105 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wdbjsh 2009-04-23
sorry 8楼的东西有点问题不是递归。代码如下

dim bj=1
for i= 1 to 1000
for j=bj to 100

if a(i)=b(j) then
表达式
bj=j
exit for
end if
next
next
这样的话,如果a和b都是排过序的数组,那么实际上只会比较1000次左右
回复
wdbjsh 2009-04-23
另外,你的a和b两个数组的值是不是排过序的?如果两个数组的值是排过序的那么实际上只需要比较大概1000多次就可以了。不过需要用到递归,代码比较麻烦
回复
wdbjsh 2009-04-23
忘记了asp是不是支持break了

不过你可以这样

for i= 1 to 1000
for j=1 to 100

if a(i)=b(j) then
表达式
j=101
end if
next
next
回复
taochunsong 2009-04-22
给点答案噻
回复
davs 2009-04-22
试试Redim Preserve 重定义多维数组,这个可以自由改变数组长度
回复
taochunsong 2008-12-26
没有人知道么?
回复
taochunsong 2008-11-28
这里可能有点问题了,我不是要判断这个值在a数组中有没有,而是
如果b(j,k)=a(i,1)的时候要把a(i,2)的值赋给ab(i,k)

可能我没有表述清楚.
谢谢,各位多帮忙
回复
smartcatiboy 2008-11-27
这个算法要不得,大数组的逐一比较必须用hash,asp可以直接利用字典来做

set objDct=createobject("scripting.dictionary")
for i=1 to 1000
objDct.add a(i),a(i)
next

for i=0 to 100
if objDct.exists(b(i)) then 表达式
next

这个只要100次比较,比你快3个数量级。
回复
相关推荐
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2008-11-26 06:34
社区公告
暂无公告