给定多项式函数f(x)= 1+ a1 * x + a2 *(x ^ 2)+…an(x ^ n)。在给定x以及所有系数的情况下,找到这些函数的Sgn值。
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
例子:
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
then 0, hence -1.
天真的方法将计算所有x的电源,然后用它的系数相乘,把它添加到答案。 x的计算能力将花费O(n)时间,并且需要n个系数。因此,将总复杂度设为O(n * n)
一种有效的方法是使用霍纳法。我们使用霍纳方法评估多项式的值。然后我们根据值的符号返回值。
下面是上述方法的实现
C++
// CPP program to find sign value of a
// polynomial
#include
using namespace std;
// returns value of poly[0]x(n-1) + poly[1]x(n-2)
// + .. + poly[n-1]
int horner(int poly[], int n, int x)
{
int result = poly[0]; // Initialize result
// Evaluate value of polynomial
// using Horner's method
for (int i=1; i 0)
return 1;
else if (result < 0)
return -1;
return 0;
}
// Driver program to test above function.
int main()
{
// Let us evaluate value of 2x3 - 6x2
// + 2x - 1 for x = 3
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
// Java program to find sign value of a
// polynomial
class GFG
{
// returns value of poly[0]x(n-1) + poly[1]x(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 < n; i++)
result = result * x + poly[i];
return result;
}
// Returns sign value of polynomial
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;
}
// Driver code
public static void main (String[] args)
{
// 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;
System.out.print("Sign of polynomial is "+
findSign(poly, n, x));
}
}
// This code is contributed by Anant Agarwal.
Python3
# Python3 program to find
# sign value of a
# polynomial
# returns value of poly[0]x(n-1) +
# poly[1]x(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;
# Returns sign value
# of polynomial
def findSign(poly, n, x):
result = horner(poly, n, x);
if (result > 0):
return 1;
elif (result < 0):
return -1;
return 0;
# Driver Code
# Let us evaluate value
# of 2x3 - 6x2
# + 2x - 1 for x = 3
poly = [2, -6, 2, -1];
x = 3;
n = len(poly);
print("Sign of polynomial is ",
findSign(poly, n, x));
# This code is contributed by mits
C#
// C# program to find sign value of a
// polynomial
using System;
class GFG {
// returns value of poly[0]x(n-1)
// + poly[1]x(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 < n; i++)
result = result * x + poly[i];
return result;
}
// Returns sign value of polynomial
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;
}
// 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("Sign of polynomial is "
+ findSign(poly, n, x));
}
}
// This code is contributed by vt_m.
PHP
0)
return 1;
else if ($result < 0)
return -1;
return 0;
}
// Driver Code
// Let us evaluate value
// of 2x3 - 6x2
// + 2x - 1 for x = 3
$poly = array(2, -6, 2, -1);
$x = 3;
$n = count($poly);
echo "Sign of polynomial is "
, findSign($poly, $n, $x);
// This code is contributed by anuj_67.
?>
Javascript
输出:
Sign of polynomial is 1