zoukankan      html  css  js  c++  java
  • 实现多项式的JAVA类

      1 package practice;
      2 //http://introcs.cs.princeton.edu/java/92symbolic/Polynomial.java.html
      3 /*************************************************************************
      4  *  Compilation:  javac Polynomial.java
      5  *  Execution:    java Polynomial
      6  *
      7  *  Polynomials with integer coefficients.
      8  *
      9  *  % java Polynomial
     10  *  zero(x) =     0
     11  *  p(x) =        4x^3 + 3x^2 + 2x + 1
     12  *  q(x) =        3x^2 + 5
     13  *  p(x) + q(x) = 4x^3 + 6x^2 + 2x + 6
     14  *  p(x) * q(x) = 12x^5 + 9x^4 + 26x^3 + 18x^2 + 10x + 5
     15  *  p(q(x))     = 108x^6 + 567x^4 + 996x^2 + 586
     16  *  0 - p(x)    = -4x^3 - 3x^2 - 2x - 1
     17  *  p(3)        = 142
     18  *  p'(x)       = 12x^2 + 6x + 2
     19  *  p''(x)      = 24x + 6
     20  *
     21  *************************************************************************/
     22 public class Polynomial {
     23     private int[] coef; //coefficients 系数
     24     private int deg;//degree of polynomial (0 for the zero polynomial)
     25     
     26     //a*x^b
     27     public Polynomial(int a, int b){
     28         coef = new int[b+1];
     29         coef[b] = a;
     30         deg = degree();
     31     }
     32     
     33     // return the degree of this polynomial (0 for the zero polynomial)
     34     public int degree(){
     35         int d = 0;
     36         for(int i = 0; i<coef.length; i++)
     37             if(coef[i]!=0)
     38                 d = i;
     39 
     40         return d;
     41     }
     42     
     43     //return c = a+b
     44     public Polynomial plus(Polynomial b){
     45         Polynomial a = this;
     46         Polynomial c = new Polynomial(0, Math.max(a.deg, b.deg));
     47         for(int i = 0; i <= a.deg; i++)
     48             c.coef[i] += a.coef[i];
     49         for(int i = 0; i <= b.deg; i++)
     50             c.coef[i] += b.coef[i];
     51         c.deg = c.degree();
     52         return c;
     53     }
     54     
     55     // return (a - b)
     56     public Polynomial minus(Polynomial b) {
     57         Polynomial a = this;
     58         Polynomial c = new Polynomial(0, Math.max(a.deg, b.deg));
     59         for (int i = 0; i <= a.deg; i++) c.coef[i] += a.coef[i];
     60         for (int i = 0; i <= b.deg; i++) c.coef[i] -= b.coef[i];
     61         c.deg = c.degree();
     62         return c;
     63     }
     64 
     65     // return (a * b)
     66     public Polynomial times(Polynomial b) {
     67         Polynomial a = this;
     68         Polynomial c = new Polynomial(0, a.deg + b.deg);
     69         for (int i = 0; i <= a.deg; i++)
     70             for (int j = 0; j <= b.deg; j++)
     71                 c.coef[i+j] += (a.coef[i] * b.coef[j]);
     72         c.deg = c.degree();
     73         return c;
     74     }
     75 
     76     // return a(b(x))  - compute using Horner's method
     77     public Polynomial compose(Polynomial b) {
     78         Polynomial a = this;
     79         Polynomial c = new Polynomial(0, 0);
     80         for (int i = a.deg; i >= 0; i--) {
     81             Polynomial term = new Polynomial(a.coef[i], 0);
     82             c = term.plus(b.times(c));
     83         }
     84         return c;
     85     }
     86 
     87 
     88     // do a and b represent the same polynomial?
     89     public boolean eq(Polynomial b) {
     90         Polynomial a = this;
     91         if (a.deg != b.deg) return false;
     92         for (int i = a.deg; i >= 0; i--)
     93             if (a.coef[i] != b.coef[i]) return false;
     94         return true;
     95     }
     96 
     97 
     98     // use Horner's method to compute and return the polynomial evaluated at x
     99     public int evaluate(int x) {
    100         int p = 0;
    101         for (int i = deg; i >= 0; i--)
    102             p = coef[i] + (x * p);
    103         return p;
    104     }
    105 
    106     // differentiate this polynomial and return it
    107     public Polynomial differentiate() {
    108         if (deg == 0) return new Polynomial(0, 0);
    109         Polynomial deriv = new Polynomial(0, deg - 1);
    110         deriv.deg = deg - 1;
    111         for (int i = 0; i < deg; i++)
    112             deriv.coef[i] = (i + 1) * coef[i + 1];
    113         return deriv;
    114     }
    115     public String toString(){
    116         if(deg == 0)
    117             return "" + coef[0];
    118         if(deg == 1)
    119             return coef[1] + "x + " + coef[0];
    120         
    121         String s = coef[deg] + "x^" + deg;
    122         for(int i = deg-1; i >= 0; i--){
    123             if(coef[i] == 0)
    124                 continue;
    125             else if(coef[i] > 0)
    126                 s = s + " + " + ( coef[i]);
    127             else if(coef[i] < 0)
    128                 s = s + " - " + (-coef[i]);
    129             if(i== 1)
    130                 s = s + "x";
    131             else if(i > 1)
    132                 s = s +"x^" + i;
    133         }
    134         return s;
    135     }
    136     
    137     public static void main(String[] args) { 
    138         Polynomial zero = new Polynomial(0, 0);
    139 
    140         Polynomial p1   = new Polynomial(4, 3);
    141         Polynomial p2   = new Polynomial(3, 2);
    142         Polynomial p3   = new Polynomial(1, 0);
    143         Polynomial p4   = new Polynomial(2, 1);
    144         Polynomial p    = p1.plus(p2).plus(p3).plus(p4);   // 4x^3 + 3x^2 + 1
    145 
    146         Polynomial q1   = new Polynomial(3, 2);
    147         Polynomial q2   = new Polynomial(5, 0);
    148         Polynomial q    = q1.plus(q2);                     // 3x^2 + 5
    149 
    150 
    151         Polynomial r    = p.plus(q);
    152 //        Polynomial s    = p.times(q);
    153 //        Polynomial t    = p.compose(q);
    154 
    155         System.out.println("zero(x) =     " + zero);
    156         System.out.println("p(x) =        " + p);
    157         System.out.println("q(x) =        " + q);
    158         System.out.println("p(x) + q(x) = " + r);
    159 //        System.out.println("p(x) * q(x) = " + s);
    160 //        System.out.println("p(q(x))     = " + t);
    161 //        System.out.println("0 - p(x)    = " + zero.minus(p));
    162 //        System.out.println("p(3)        = " + p.evaluate(3));
    163 //        System.out.println("p'(x)       = " + p.differentiate());
    164 //        System.out.println("p''(x)      = " + p.differentiate().differentiate());
    165    }
    166 }
  • 相关阅读:
    Trapping Rain Water
    Construct Binary Tree from Preorder and Inorder Traversal
    Flatten Binary Tree to Linked List
    Permutations II
    Unique Paths II
    Path Sum II
    Unique Binary Search Trees II
    evdev module-----uinput.py
    evdev module-----events.py
    evdev module-----device.py
  • 原文地址:https://www.cnblogs.com/springfor/p/4001249.html
Copyright © 2011-2022 走看看