递归算法的优化

经群里高人点拨。决定还是先把算法优化下试试。

递归算法本身效率就比较低下,由于其便捷性,还有本人思维狭隘性,目前还无法想出替代它的方法。

只能从递归内部的逻辑运算和变量等开始着手。

先在各个过程里加上计时器,看哪里耗时最大。例如:

            timer = new Stopwatch();
timer.Start();

times[0] = (int)timer.Elapsed.TotalMilliseconds;
searchAll(startTile, paths);
times[0] = (int)timer.Elapsed.TotalMilliseconds - times[0];

然后反复比较、修改,作出优化如下:

1.Dictionary改为LinkedList。

   字典拷贝耗费大量的时间,约占总时间的30%。由于目前逻辑得到的数据是链状的,因此根本不需要它。

   修改后提升约30%性能。

2.foreach改为for。

   这是网上查到的。说这2个效率差10%左右。改了下试试果然如此。

3.逻辑优化:这就和递归无关了。将之前2个可能造成多余计算的地方修改了。

最终计算速度减少为之前的1/2。泪流满面……

不过即便如此,大图的计算还是让人抓狂的。有机会要改改算法才行。

其中LinkedList的拷贝仍然很耗时,也约占总时间的30%。

 

另外采纳某群友的建议,加了个计算货架数最少路径的功能,将RMB进行到底><

用了此功能后算出的路径也就1~2个了。很好选择。

 

接下来就是双格货架的问题了。头疼。。。

 

转载于:https://www.cnblogs.com/youki/archive/2012/03/17/2404184.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值