у меня есть Polynomial
класс, который имеет get_vect
функция-член, которая хранит целые числа в векторе, который должен быть представлением коэффициентов многочлена. Теперь я пытаюсь умножить два полинома вместе, используя Multiply
функция, не являющаяся членом, но я застреваю, когда дело доходит до фактического умножения векторов. Пока что у меня есть то, что показано ниже:
Polynomial Multiply(const Polynomial & poly1, const Polynomial & poly2)
{
vector<int> Poly1 = poly1.get_vect();
vector<int> Poly2 = poly2.get_vect();
vector<int> Poly3;
if( Poly1.size() < Poly2.size() )
{
for(size_t i = 0 ; Poly2.size()-Poly1.size() ; ++i )
{
Poly2.push_back(0);
}
}
else if( Poly1.size() > Poly2.size() )
{
for(size_t i = 0 ; Poly1.size()-Poly2.size() ; ++i )
{
Poly1.push_back(0);
}
}
return Poly3;
}
Я вижу, что он должен следовать приведенному ниже шаблону:
Итак, если я правильно понимаю проблему, вы хотите Poly3
быть vector<int>
который содержит коэффициенты, которые являются результатом полиномиального умножения между полиномами, представленными Poly1
а также Poly2
,
В этом запросе подразумевается, что все три полинома являются полиномами от одной переменной, причем каждый коэффициент представляет коэффициент перед возрастающей степенью этой переменной. то есть. тот { 4, 5, 6, 7 }
соответствует 4 + 5x + 6x2 + 7x3.
Если это так, то фактическое умножение не должно быть таким уж сложным, если ваши полиномы не очень большие. Вам нужен код, который выглядит примерно так:
Poly3.resize(Poly1.size() + Poly2.size() - 1, 0); // Make the output big enough; init to 0
for (size_t i = 0; i != Poly1.size(); i++)
for (size_t j = 0; j != Poly2.size(); j++)
Poly3[i+j] += Poly1[i] * Poly2[j];
Теперь результат в Poly3
должен быть продуктом Poly1
а также Poly2
,
Вполне возможно, что я забыл краевое состояние; Я буду следить за комментариями здесь, чтобы указать, где я сделал. Тем временем, однако, я сделал несколько тестов, и, похоже, это дает правильный вывод.
Если у вас довольно большие полиномы, вы можете изучить математические библиотеки для обработки умножения. Но для чего-то около 20-30 сроков? Если ваш код не очень сильно зависит от этой полиномиальной оценки, я подозреваю, что это не будет вашим узким местом.
Других решений пока нет …