0

나는 get_vect 멤버 함수를 가지고있는 Polynomial 클래스를 가지고 있습니다.이 함수는 다항식의 계수를 나타내는 벡터에 정수를 저장합니다. 자, 난 두 개의 다항식을 함께 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; 
} 

내가 그것을 어떤 방법 아래의 패턴을 따라하는 것을 볼 수 :

enter image description here

+0

왜 패턴이 필요한지 잘 모르겠습니다. 같은베이스를 곱하면 지수가 추가됩니다. – chris

+1

사진은 현재 사용할 수 없습니다. (귀하의 이미지 링크는 좋지 않습니다) –

+0

@ BenjaminLindley, 그것은 나를 위해 잘 작동합니다. 어쨌든, 전에 질문에 그것을 추가하는 것을 잊었습니다. – chris

답변

2

확인을, 그래서 문제를 정확하게 이해한다면 지금까지 내가 무엇을 가지고 아래에 표시되는 내용입니다 Poly3Poly1Poly2으로 표시된 다항식 간의 다항식 곱셈 결과 인 계수를 보유하는 vector<int>이됩니다.

이 요청에서 Tacit은 3 개의 다항식 모두가 단일 변수에서 다항식이며 각 계수는 해당 변수의 증가하는 힘 앞에 계수를 나타냅니다. 즉. 그 { 4, 5, 6, 7 }은 4 + 5x + 6x + 7x 에 해당합니다.

그렇다면 실제 곱셈은 다항식이 대단히 크지 않은 한 전혀 어렵지 않아야합니다.

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의 결과가 Poly1Poly2의 제품이어야한다 :이 같은 약 보이는 코드가 필요합니다.

가장자리 조건을 완전히 잊어 버린 것 같습니다. 나는 내가 한 곳을 지적하기 위해 여기서 논평을 볼 것이다. 그동안, 몇 가지 테스트를 수행했는데 올바른 결과를 얻은 것으로 보입니다.

큰 다항식을 사용하는 경우 수학 라이브러리를 조사하여 곱셈을 처리하는 것이 좋습니다. 하지만 약 20 ~ 30 조건 하에서는 어떤 것도? 코드가이 다항식 평가에 매우 열중하지 않는 한 병목 현상이되지는 않을 것으로 생각됩니다.

+0

트릭을 수행하는 것 같습니다. 고맙습니다. –

+0

그렇다면 답변에 태그를 추가하여 더 이상 답변되지 않은 질문에 나열되지 않도록하십시오. 그리고 기꺼이 도와주세요. 천만에요! :-) –