##### Reference no: EM131064978

Consider the polynomials with integer coefficients and positive integer exponents:

P(x) = a0 * x^{0} + a^{1} * x^{1} + ... + a^{n-1} * x^{n-1}

For programming purposes, a polynomial is represented as an array of integers. The array cell of index i corresponds to the polynomial coefficient ai, where i represents the exponent of the variable x.

For example, if the polynomial is P(x) = 2 * x^{3} - 9 * x^{2} + 0 * x^{1} + 8 * x^{0}, its representation as an array of size 4 is shown below:

Consider the problem of calculating the polynomial value for an integer value of its variable x.

As an example, for the above polynomial and for x = 2, the value of P(2) is -12.

a) Design and write the methods calculateBruteForce and calculateHorner for calculating the polynomial value for an integer value of x by using the brute force approach and respectively Horner's technique. Each method should take two parameters: the array of coefficients representing the polynomial and the value of x.

When implementing calculateBruteForce method, define and invoke your own method for raising x to a given power by using repetitive multiplications, instead of invoking a predefined method such as the Math.pow().

(a1) By analyzing the code, determine and indicate time complexity for each of the two methods in terms of Big-O notation.

(a2) Which of the two methods would perform better in terms of execution time? Explain.

b) Write a driver program PolyVal.java to validate the conclusions drawn from question a2). Consider a polynomial with 10 terms whose coefficients are stored in an integer array and are randomly generated in the interval -9 .. 9. Implement the following actions:

(b1) Generate and display the polynomial.

(b2) Generate and display a random integer value x in the interval 1 .. 9.

(b3) Invoke the two methods and display the polynomial value returned by each method for the x value generated at (b2).

(b4) Measure and display the execution time of the two methods as the arithmetic mean value of 1010 executions. Use the method System.nanoTime() for determining the execution time. Discuss the obtained results. Are the results in line with your answer to question a?

Note. Due to the behavior of the JVM and JIT compiler, the execution time of the repeated programs is much slower the first times they are run and therefore make sure to discard the measured values for the initial 10 runs.

Submission requirements

Submit the following before the due date listed in the Calendar:

1. The source file PolyVal.java.

The source code should use Java code conventions and professional code layout regarding white space management, indents and comments.

2. The Solution description document <YourSecondName>_HW1 (.pdf or .doc / .docx) containing:

(2.1) assumptions, main design decisions, error handling; (2.2) test cases and two relevant screenshots; (2.3) the answer and discussion required by questions a2) and b4); (2.4) lessons learned and (2.5) possible improvements. The size of the document file (including the screenshots) should be of two pages, single spaced, font size 10.