# Horner’s Method for Polynomial Evaluation

Given a polynomial of the form cnxn + cn-1xn-1 + cn-2xn-2 + … + c1x + c0 and a value of x, find the value of polynomial for a given value of x. Here cn, cn-1, .. are integers (may be negative) and n is a positive integer.

Input is in the form of an array say poly[] where poly represents coefficient for xn and poly represents coefficient for xn-1 and so on.

Examples:

```// Evaluate value of 2x3 - 6x2 + 2x - 1 for x = 3
Input: poly[] = {2, -6, 2, -1}, x = 3
Output: 5

// Evaluate value of 2x3 + 3x + 1 for x = 2
Input: poly[] = {2, 0, 3, 1}, x = 2
Output: 23
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

A naive way to evaluate a polynomial is to one by one evaluate all terms. First calculate xn, multiply the value with cn, repeat the same steps for other terms and return the sum. Time complexity of this approach is O(n2) if we use a simple loop for evaluation of xn. Time complexity can be improved to O(nLogn) if we use O(Logn) approach for evaluation of xn.

Horner’s method can be used to evaluate polynomial in O(n) time. To understand the method, let us consider the example of 2x3 – 6x2 + 2x – 1. The polynomial can be evaluated as ((2x – 6)x + 2)x – 1. The idea is to initialize result as coefficient of xn which is 2 in this case, repeatedly multiply result with x and add next coefficient to result. Finally return result.

Following is implementation of Horner’s Method.

## C/C++

 `#include ` `using` `namespace` `std; ` ` `  `// returns value of polyx(n-1) + polyx(n-2) + .. + poly[n-1] ` `int` `horner(``int` `poly[], ``int` `n, ``int` `x) ` `{ ` `    ``int` `result = poly;  ``// Initialize result ` ` `  `    ``// Evaluate value of polynomial using Horner's method ` `    ``for` `(``int` `i=1; i

## Java

 `// Java program for implementation of Horner Method  ` `// for Polynomial Evaluation ` `import` `java.io.*; ` ` `  `class` `HornerPolynomial ` `{ ` `    ``// Function that returns value of polyx(n-1) + ` `    ``// polyx(n-2) + .. + poly[n-1] ` `    ``static` `int` `horner(``int` `poly[], ``int` `n, ``int` `x) ` `    ``{ ` `        ``// Initialize result ` `        ``int` `result = poly[``0``];   ` `  `  `        ``// Evaluate value of polynomial using Horner's method ` `        ``for` `(``int` `i=``1``; i

## Python3

 `# Python program for ` `# implementation of Horner Method  ` `# for Polynomial Evaluation ` ` `  `# returns value of polyx(n-1) ` `# + polyx(n-2) + .. + poly[n-1] ` `def` `horner(poly, n, x): ` ` `  `    ``# Initialize result ` `    ``result ``=` `poly[``0``]   ` `  `  `    ``# Evaluate value of polynomial ` `    ``# using Horner's method ` `    ``for` `i ``in` `range``(``1``, n): ` ` `  `        ``result ``=` `result``*``x ``+` `poly[i] ` `  `  `    ``return` `result ` `  `  `# Driver program to ` `# test above function. ` ` `  `# Let us evaluate value of ` `# 2x3 - 6x2 + 2x - 1 for x = 3 ` `poly ``=` `[``2``, ``-``6``, ``2``, ``-``1``] ` `x ``=` `3` `n ``=` `len``(poly) ` ` `  `print``("Value of polynomial ``is` `" , horner(poly, n, x)) ` ` `  `# This code is contributed ` `# by Anant Agarwal. `

## C#

 `// C# program for implementation of  ` `// Horner Method  for Polynomial Evaluation. ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``// Function that returns value of polyx(n-1) + ` `    ``// polyx(n-2) + .. + poly[n-1] ` `    ``static` `int` `horner(``int` `[]poly, ``int` `n, ``int` `x) ` `    ``{ ` `        ``// Initialize result ` `        ``int` `result = poly;  ` ` `  `        ``// Evaluate value of polynomial ` `        ``// using Horner's method ` `        ``for` `(``int` `i = 1; i < n; i++) ` `            ``result = result * x + poly[i]; ` ` `  `        ``return` `result; ` `    ``} ` `     `  `    ``// Driver Code ` `    ``public` `static` `void` `Main()  ` `    ``{ ` `        ``// Let us evaluate value of ` `        ``// 2x3 - 6x2 + 2x - 1 for x = 3 ` `        ``int` `[]poly = {2, -6, 2, -1}; ` `        ``int` `x = 3; ` `        ``int` `n = poly.Length; ` `        ``Console.Write("Value of polynomial ``is` `"  ` `                            ``+ horner(poly,n,x)); ` `    ``} ` `} ` ` `  `// This code Contributed by nitin mittal. `

## PHP

 ` `

Output:

`Value of polynomial is 5`

Time Complexity: O(n)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Improved By : nitin mittal, Mithun Kumar

Article Tags :
Practice Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.