📜  多项式的Sgn值

📅  最后修改于: 2021-04-23 16:35:14             🧑  作者: Mango

给定多项式函数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