|
|
| Line 1: |
Line 1: |
| − | We need two passes over X: | + | We need fast wifi |
| − | | |
| − | 1. Calculate cumulative production P and Q:<br>
| |
| − | <math>P_0 = 1, P_k=X_k P_{k-1}=\prod_{i=1}^kx_i</math><br>
| |
| − | <math>Q_n = 1, Q_k=X_k Q_{k+1}=\prod_{i=k}^nx_i</math>
| |
| − | | |
| − | 2. Calculate M:<br>
| |
| − | <math>M_k=P_{k-1}Q_{k+1}, k\in[1,n]</math>
| |
| − | -------------------------------------------------------------------------------------
| |
| − | Using Iteration:
| |
| − | | |
| − | Java example:
| |
| − | <source lang="java">
| |
| − | 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 length) {
| |
| − | if (i == length)
| |
| − | return productLeft(x, i - 2, length);
| |
| − |
| |
| − | return x[i] * productLeft(x, i - 2, length) * productRight(x, i + 1, length);
| |
| − | }
| |
| − | | |
| − | private static int productLeft(int[] x, int i, int length) {
| |
| − | if (i < 0)
| |
| − | return 1;
| |
| − | | |
| − | return x[i] * productLeft(x, i - 1, length);
| |
| − | }
| |
| − | | |
| − | private static int productRight(int[] x, int i, int length) {
| |
| − | if (i >= length)
| |
| − | return 1;
| |
| − | | |
| − | return x[i] * productRight(x, i + 1, length);
| |
| − | }
| |
| − | }
| |
| − | </source>
| |
| − | | |
| − | --[[User:Tnoumessi|Tnoumessi]] ([[User talk:Tnoumessi|talk]]) 00:21, 8 April 2015 (EDT)
| |