二项式序列的乘积读取
其中{a_i}和{b_i}是二项式的系数。
我需要将其扩展为多项式
,然后使用多项式中的所有系数{c_k}。
如何有效地扩展它?速度优先于内存占用,因为扩展将被多次使用。
我尝试过的事情
目前,我只想出一个更新方案,该方案在吸收一个二项式后立即扩展多项式。 该方案需要两个数组,一个数组的结果最大为i-1,另一个数组的结果最大为i。
这是我的幼稚方案的C ++代码,但是我认为这个问题与使用哪种语言无关。
#include <iostream>
#include <vector>
int main()
{
using namespace std;
// just an example, the coefficients are actually real numbers in [0,1]
unsigned d = 3;
vector<double> a;
vector<double> b;
a.resize(d, 1); b.resize(d, 1);
// given two arrays, a[] and b[], of length d
vector< vector<double> > coefficients(2);
coefficients[0].resize(d + 1);
coefficients[1].resize(d + 1);
if (d > 0) {
auto &coeff = coefficients[0]; // i = 0
coeff[0] = a[0];
coeff[1] = b[0];
for (unsigned i = 1; i < d; ++i) {// i : [1, d-1]
const auto ai = a[i];
const auto bi = b[i];
const auto &oldCoeff = coefficients[(i-1)%2];
auto &coeff = coefficients[i%2];
coeff[0] = oldCoeff[0] * ai; // j = 0
for (unsigned j = 1; j <= i; ++j) { // j : [1, i]
coeff[j] = oldCoeff[j] * ai + oldCoeff[j-1] * bi;
}
coeff[i+1] = oldCoeff[i] * bi; // j = i
}
}
const auto &coeff = coefficients[(d-1)%2];
for (unsigned i = 0; i < d; ++i) {
cout << coeff[i] << "\t";
}
cout << coeff[d] << '\n';
}