У меня есть корни монического многочлена, т.е.
p(x) = (x-x_1)*...*(x-x_n)
и мне нужны коэффициенты a_n, ..., a_0 из
p(x) = x^n + a_{n-1}x^{n-1} + ... + a_0.
Кто-нибудь знает компьютерно эффективный способ сделать это? Если кто-нибудь знает реализацию C/C++, это будет лучше всего. (Я уже посмотрел на GSL, но он не предоставлял функции.)
Конечно, я знаю, как это математически. Я знаю, что коэффициент a_i
есть сумма всех произведений подмножеств с n-i
элементами. Но если бы я сделал это тупым способом, это означает перебор всех подмножеств, мне бы понадобилось
sum^{n-1}_{k=1} ( k choose n) * (k-1)
умножения и
sum^n_{k=0} ( k choose n) - n
дополнения. Следовательно, оба члена растут с O(n!)
, что требует слишком больших вычислений для преобразования списка n
корня в список n
коэффициентов. Я считаю, что должен быть какой-то разумный способ повторного использования большинства промежуточных результатов, но я его не нашел.