【发布时间】:2015-05-03 14:28:04
【问题描述】:
我正在尝试解决一个问题,在该问题中,您必须计算给定特定参数可以制作的条码数量。我递归地解决了这个问题,每次都能得到正确的答案。但是,我的程序非常慢。我尝试使用我读过的一种称为 memoization 的技术来纠正这个问题,但是当给定某些输入(例如:10、10、10)时,我的程序仍然会爬行。这是java中的代码。
有人知道我在这里做错了什么吗?
import java.util.Scanner;
//f(n, k, m) = sum (1 .. m) f(n - i, k - 1, m)
public class BarCode { public static int[][] memo;
public static int count(int units, int bars, int width) {
int sum = 0;
if (units >= 0 && memo[units][bars] != -1) //if the value has already been calculated return that value
return memo[units][bars];
for (int i = 1; i <= width; ++i) {
if (units == 0 && bars == 0)
return 1;
else if (bars == 0)
return 0;
else {
sum += count(units - i, bars - 1, width);
}
}
if (units > -1)
memo[units][bars] = sum;
return sum;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//while (in.hasNext()) {
int num = in.nextInt();
int bars = in.nextInt();
int width = in.nextInt();
memo = new int[51][51];
for (int i = 0; i < memo.length; ++i) {
for (int j = 0; j < memo.length; ++j)
memo[i][j] = -1;
}
int sum = 0;
sum += count(num, bars, width);
System.out.println(sum);
//}
in.close();
}
}
TL:DR 我对递归搜索的记忆太慢了。救命!
【问题讨论】:
标签: java recursion memoization