|
|
1
2
您的算法是指数型的,在每增加一个“宽度级别”,您将为前一级别中的每个值添加2个新值。例如:
对于src=26,dst=5的情况,解决方案是减去1直到达到5,这需要21个“宽度级别”=21个操作。在该级别,您的队列和
你应该想一个更好的算法。对于初学者来说,如果您的当前值高于目标值,那么将其加倍是没有意义的,因为它肯定只会增加额外的步骤。。
仅此考虑就可以将这种情况下的步骤数从数百万减少到21(您只需减去1,直到达到目标值,通常情况下
|
|
|
2
1
由于指数增长,BFS在这里并不完全是一个选项(
允许
有三种情况:
最小数量的运算需要最小数量的乘法和减法。由于以下事实,可以很容易地减少减影:
伪代码中的实现如下(无法提供python代码):
该实现也涵盖了以下情况
在上面的java实现中测试运行将产生以下输出:
上述计算的简化表明了该算法背后的思想:
感谢@user3386109的解释:
|
|
|
3
0
该代码有望实现上述非常有效的算法。
说明: 想象一个楼梯,从(n)开始,你必须到达它的顶部(即:数字m),所以你决定列出所有要采取的最佳步骤,然后你参考你拥有的数字,看看它是否存在于你为最佳解决方案制定的列表中,如果它存在,那么你只需按照这些步骤,你就会得到最佳解决方案,如果没有,你就必须按照最佳的步骤(比如减去1),然后你就在最佳的轨道上,到达你的目的地。 更多信息:请参考mr.paul解决方案中的解释,上面的解释更好地解释了这一点。 |