Sgn value of a polynomial
Given a polynomial function f(x) = 1+ a1*x + a2*(x^2) + … an(x^n). Find the Sgn value of these function, when x is given and all the coefficients also.
If value of polynomial greater than 0
Sign = 1
Else If value of polynomial less than 0
Sign = -1
Else if value of polynomial is 0
Sign = 0
Examples:
Input: poly[] = [1, 2, 3]
x = 1
Output: 1
Explanation: f(1) = 6 which is > 0
hence 1.
Input: poly[] = [1, -1, 2, 3]
x = -2
Output: -1
Explanation: f(-2)=-11 which is less
than 0, hence -1.
A naive approach will be to calculate every power of x and then add it to the answer by multiplying it with its coefficient. Calculating power of x will take O(n) time and for n coefficients. Hence, taking the total complexity to O(n * n), as we will need nested loops for traversing n*n times.
An efficient approach is to use Horner’s method. We evaluate value of polynomial using Horner’s method. Then we return value according to sign of the value.
Below is the implementation of the above approach
C++
#include <iostream>
using namespace std;
int horner( int poly[], int n, int x)
{
int result = poly[0];
for ( int i=1; i<n; i++)
result = result*x + poly[i];
return result;
}
int findSign( int poly[], int n, int x)
{
int result = horner(poly, n, x);
if (result > 0)
return 1;
else if (result < 0)
return -1;
return 0;
}
int main()
{
int poly[] = {2, -6, 2, -1};
int x = 3;
int n = sizeof (poly)/ sizeof (poly[0]);
cout << "Sign of polynomial is "
<< findSign(poly, n, x);
return 0;
}
|
Java
class GFG
{
static int horner( int poly[], int n, int x)
{
int result = poly[ 0 ];
for ( int i = 1 ; i < n; i++)
result = result * x + poly[i];
return result;
}
static int findSign( int poly[], int n, int x)
{
int result = horner(poly, n, x);
if (result > 0 )
return 1 ;
else if (result < 0 )
return - 1 ;
return 0 ;
}
public static void main (String[] args)
{
int poly[] = { 2 , - 6 , 2 , - 1 };
int x = 3 ;
int n = poly.length;
System.out.print( "Sign of polynomial is " +
findSign(poly, n, x));
}
}
|
Python3
def horner( poly, n, x):
result = poly[ 0 ];
for i in range ( 1 ,n):
result = (result * x +
poly[i]);
return result;
def findSign(poly, n, x):
result = horner(poly, n, x);
if (result > 0 ):
return 1 ;
elif (result < 0 ):
return - 1 ;
return 0 ;
poly = [ 2 , - 6 , 2 , - 1 ];
x = 3 ;
n = len (poly);
print ( "Sign of polynomial is " ,
findSign(poly, n, x));
|
C#
using System;
class GFG {
static int horner( int []poly, int n, int x)
{
int result = poly[0];
for ( int i = 1; i < n; i++)
result = result * x + poly[i];
return result;
}
static int findSign( int []poly, int n, int x)
{
int result = horner(poly, n, x);
if (result > 0)
return 1;
else if (result < 0)
return -1;
return 0;
}
public static void Main ()
{
int []poly = {2, -6, 2, -1};
int x = 3;
int n = poly.Length;
Console.Write( "Sign of polynomial is "
+ findSign(poly, n, x));
}
}
|
PHP
<?php
function horner( $poly , $n , $x )
{
$result = $poly [0];
for ( $i = 1; $i < $n ; $i ++)
$result = $result * $x + $poly [ $i ];
return $result ;
}
function findSign( $poly , $n , $x )
{
$result = horner( $poly , $n , $x );
if ( $result > 0)
return 1;
else if ( $result < 0)
return -1;
return 0;
}
$poly = array (2, -6, 2, -1);
$x = 3;
$n = count ( $poly );
echo "Sign of polynomial is "
, findSign( $poly , $n , $x );
?>
|
Javascript
<script>
function horner(poly, n, x)
{
var result = poly[0];
for ( var i = 1; i < n; i++)
result = result * x + poly[i];
return result;
}
function findSign(poly, n, x)
{
var result = horner(poly, n, x);
if (result > 0)
return 1;
else if (result < 0)
return -1;
return 0;
}
var poly = [ 2, -6, 2, -1 ];
var x = 3;
var n = poly.length;
document.write( "Sign of polynomial is " +
findSign(poly, n, x));
</script>
|
Output:
Sign of polynomial is 1
Time Complexity: O(N), as we are using a loop to traverse N times.
Auxiliary Space: O(1), as we are not using any extra space.
Last Updated :
18 Sep, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...