Difference between revisions of "TADM2E 3.28"
From Algorithm Wiki
(Clean up the code and state that it is Java.) |
m (Slight cleanup) |
||
| Line 13: | Line 13: | ||
<pre> | <pre> | ||
public class Multiplication { | public class Multiplication { | ||
| − | public static int[] product(int[] x) { | + | public static int[] product(int[] x) { |
int[] M = new int[x.length]; | int[] M = new int[x.length]; | ||
for (int i = 0; i < x.length; i++) { | for (int i = 0; i < x.length; i++) { | ||
| − | + | M[i] = product(x, M, i + 1, x.length); | |
} | } | ||
return M; | return M; | ||
| + | } | ||
| + | |||
| + | private static int product(int[] x, int[] y, int i, int j) { | ||
| + | if(i == j) | ||
| + | return productLeft(x, i - 2, j); | ||
| + | |||
| + | return x[i] * productLeft(x, i - 2, j) * productRight(x, i + 1, j); | ||
} | } | ||
| Line 35: | Line 42: | ||
return x[i] * productRight(x, i + 1, j); | return x[i] * productRight(x, i + 1, j); | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
} | } | ||
} | } | ||
Revision as of 09:22, 8 November 2015
We need two passes over X:
1. Calculate cumulative production P and Q:
$ P_0 = 1, P_k=X_k P_{k-1}=\prod_{i=1}^kx_i $
$ Q_n = 1, Q_k=X_k Q_{k+1}=\prod_{i=k}^nx_i $
2. Calculate M:
$ M_k=P_{k-1}Q_{k+1}, k\in[1,n] $
Using Iteration:
Java example:
public class Multiplication {
public static int[] product(int[] x) {
int[] M = new int[x.length];
for (int i = 0; i < x.length; i++) {
M[i] = product(x, M, i + 1, x.length);
}
return M;
}
private static int product(int[] x, int[] y, int i, int j) {
if(i == j)
return productLeft(x, i - 2, j);
return x[i] * productLeft(x, i - 2, j) * productRight(x, i + 1, j);
}
private static int productLeft(int[] x, int i, int j) {
if (i < 0)
return 1;
return x[i] * productLeft(x, i - 1, j);
}
private static int productRight(int[] x, int i, int j) {
if (i >= j)
return 1;
return x[i] * productRight(x, i + 1, j);
}
}