【发布时间】:2016-06-09 16:43:43
【问题描述】:
问题:
鉴于这 3 个对数字和整数 n 的有效操作:
- 数字加 1
- 将数字乘以 2
- 将数字乘以 3
描述一个有效的算法,用上面提到的 3 个操作从 1 到 n 的最小操作数。
例如,对于 n = 28,答案是 4:1 * 3 * 3 * 3 + 1 = 27 + 1 = 28。
我用java写了下面的代码,对于num>=1000需要很长时间才能结束。你能帮我理解w.r.t有什么问题吗?效率。我正在尝试制定更有效的算法来解决问题。请帮忙。
public static int ToN(int num){
return to(1,num);
}
public static int to(int x,int y){
if (x==y)
return 0;
if (x>y)
return y;
return Math.min(Math.min(to(x+1,y),to(x*2,y)),to(x*3,y))+1;
}
【问题讨论】:
-
你了解过朴素的递归斐波那契实现吗?为什么这么慢?出于同样的原因,您的代码很慢。
标签: algorithm dynamic-programming number-theory