Difference between revisions of "TADM2E 3.28"

From Algorithm Wiki
Jump to: navigation, search
(j seems to be the length of x, so rename it to make it clearer.)
(This media wiki supports <source>, which is nice.)
Line 11: Line 11:
  
 
Java example:
 
Java example:
<pre>
+
<source lang="java">
 
public class Multiplication {
 
public class Multiplication {
 
   public static int[] product(int[] x) {
 
   public static int[] product(int[] x) {
Line 44: Line 44:
 
   }
 
   }
 
}
 
}
</pre>
+
</source>
  
 
--[[User:Tnoumessi|Tnoumessi]] ([[User talk:Tnoumessi|talk]]) 00:21, 8 April 2015 (EDT)
 
--[[User:Tnoumessi|Tnoumessi]] ([[User talk:Tnoumessi|talk]]) 00:21, 8 April 2015 (EDT)

Revision as of 09:31, 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 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);
  }
}

--Tnoumessi (talk) 00:21, 8 April 2015 (EDT)