| |||
ayuda por favor Hola, soy nuevo usando el lenguaje C y tengo que hacer un programa que multiplique dos polinomios usando un algoritmo divide y venceras. Por favor que alguien me ayude, que llevo dos semanas intentandolo y no encuentro solucion. Gracias |
| |||
Re: ayuda por favor He intentado dividir los polinomios en 2, llamar recursivamente para multiplicar esas dos partes, y despues sumarlas y volver a llamar recursivamente para multiplicar el resultado. Es el mismo metodo que se usa para multiplicar enteros largos usando divide y venceras. Aqui les dejo el codigo: int* MultiPoli(int* p, int n, int* q, int m){ int* P; int* Y; int* Pi; int* Pd; int* Qi; int* Qd; int* U; int* Z; int* Sp; int* Sq; int* f; int* j; int x=0; int y=0; int i,N,M; if (m==1) return (int *)(p[0]*q[0]); else { for(i=0;i<=((n/2)-1);i++){ //Parte IzquieZa de P Pi[i]=p[i]; } for(i=n/2;i<n;i++){ //Parte Derecha de P Pd[i]=p[i]; } for(i=0;i<=((m/2)-1);i++){ //Parte IzquieZa de Q Qi[i]=q[i]; } for(i=m/2;i<m;i++){ //Parte Derecha de Q Qd[i]=q[i]; } U=MultiPoli(Pi,n/2,Qi,m/2); //Llamada recursiva Z=MultiPoli(Pd,n/2,Qd,m/2); //Llamada recursiva for(i=0;i<=((n/2)-1);i++){ // Pi+Pd Sp[i]=Pi[i]+Pd[i]; } for(i=0;i<=((m/2)-1);i++){ // Qi+Qd Sq[i]=Qi[i]+Qd[i]; } Y=MultiPoli(Sp,n/2,Sq,m/2); //Llamada recursiva for (i=0;i<=((n/2)-1);i++){ // Y-U-Z f[i]=Y[i]-U[i]-Z[i]; } for(i=0;i<2*n;i++){ // Calculo la solucion j[i]=U[i]+f[i]+Z[i]; } return j; }//Fin else }//Fin metodo Gracias. |