14. Sabiranje/Oduzimanje/Mnozenje polinoma

p(x) = a[n] * x^n + a[n-1] * x^(n-1) + a[n-2]*x^(n-2) + … + a[1]*x + a[0]
q(x) = b[m] * x^m + b[m-1] * x^(m-1) + b[m-2]*x^(m-2) + … + b[1]*x + b[0]
p(x) = 4*x^3 + 7*x^2 – 3*x + 2
q(x) = 5*x^2 +3*x + 4
r(x) = p(x) + q(x) = 4*x^3 + 12*x^2 + 6
———————————————

int saberiPol(int n, double a[], int m, double b[], double c[]) {
  int mn = min(n, m)
  int mx = max(m, n);
  for (k = 0; k <= mn; k++)
    c[k] = a[k] + b[k];
  if (n > m) {
    for (k = mn+1; k <= n; k++)
  c[k] = a[k];
  } else {
    for (k = mn+1; k <= m; k++)
  c[k] = b[k];
  }
  while ((mx > 0) && (c[mx] == 0))
    mx–;
  return mx;
}
——————————————–

Slozenost je O(max(n,m)), Neko pise i O(m+n)
p(x) = 4*x^3 + 7*x^2 – 3*x + 2
q(x) = -4*x^3 -7*x^2 + 5*x + 4
r(x) = 0*x^3` + 0*x^2 + 2*x + 6
———————————————

int oduzmiPol(int n, double a[], int m, double b[], double c[]) {
  int mn = min(n, m)
  int mx = max(m, n);
  for (k = 0; k <= mn; k++)
    c[k] = a[k] – b[k];
  if (n > m) {
    for (k = mn+1; k <= n; k++)
  c[k] = a[k];
  } else {
    for (k = mn+1; k <= m; k++)
  c[k] = -b[k];
  }
  while ((mx > 0) && (c[mx] == 0))
    mx–;
  return mx;
}
——————————————–

Ako je stepen polinoma p(x) jednak n, a stepen polinoma q(x) je m,
onda je stepen proizvoda n+m
a[i]*x^i * b[j]*x^j —> a[i] * b[j] * x^(i+j)
a[i+1]*x^(i+1) * b[j-1]*x^(j-1) —> a[i+1] * b[j-1] * x^(i+j)
———————————————

int pomnoziPol(int n, double a[], int m, double b[], double c[]) {
  int mn = m + n;
  for (k = 0; k <= mn; k++)
    c[k] = 0;
  for (i = 0; i <= n; i++)
    for (j = 0; j <= m; j++) // mnozimo a[i]*x^i i b[j]*x^j —> a[i] * b[j] * x^(i+j)
  c[i+j] = c[i+j] + a[i] * b[j]
  return mn;
}
——————————————–

O(n*m)