让程序的运行速度提高100倍

 

 

 

最近写了一个宽度优先搜索迷宫的程序。程序中用ArrayList保存已经遍历过的节点,用节点比较判断是否已遍历。用一个测试案例去测试,竟然运行了11000毫秒。代码如下:

 

ArrayList lstTraveledNode =   new  ArrayList();
// 开始为空。

if  (lstTraveledNode.Contains(node)  ==   true )
{
     
// 已遍历过,。。。
}
else
{
     
// 未遍历过,。。。
}

感觉速度太慢了。然后改用布尔类型数组来存储已经遍历过的节点,用坐标从数组中取值比较,判断是否已遍历。仍然用原测试用例测试,运行了120毫秒,结果就出来了。速度提高了将近100倍。代码如下:

 bool[,] nodeTraveled = new bool[width, height];
//初始化后,默认为false, 代表没有遍历。
//......
if (nodeTraveled[curX, curY] == true)
{
     
//遍历过,。。。
}
else
{
     
//未遍历过,。。。
}

这两段代码的不同之处,在于第二段代码中用布尔类型代替了节点类型,方便了比较,加快了运行速度。相比之下,第一段代码是如实的记录了遍历过的点,但是并没有为这些节点编码。

现实中的事物和处理过程大都可以利用编码的方法在代码中表达。一般的,代码中用的数据类型越简单,运行效率就越高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值