Sortierte Multiplikation von Listen
-
EDIT: Sorry, ich glaub das ist schon die Lösung... stand wohl auf dem Schlauch mit Brett vorm Kopp
Servus,
ich stolpere gerade an dem Finden einer Lösung, die Algorithmik dahinter ist komplex, suche also einen einfacher Zugang... Also ich habe sechs Listen, LengthLowX, LengthLowY, LengthLowZ, LengthHighX, LengthHighY, LengthHighZ in denen sind die Koeffizienten CoeffLowX, CoeffLowY, CoeffLowZ usw.... Davon hat die Low Gruppe eine besondere Stellung, davon aber gleich mehr.
Bisher:
int Quantity; double QElements[3]; double *Value; PListe=(double *)calloc(LowX*LowY*LowZ,sizeof(double)); for(i=0;i<LowX;i++) for(j=0;j<LowY;j++) for(k=0;k<LowZ;k++) { QElements[2]=CoeffLowZ[k]; QElements[1]=CoeffLowY[j]; QElements[0]=CoeffLowX[i]; PListe[Quantity]*=QElements[2]; PListe[Quantity]*=QElements[1]; PListe[Quantity]*=QElements[0]; Quantity++; }
Obige Algorithmus gibt mir also die Permutationen von LowX usw. wieder. Die Anordnung ist dreidimensional. Die Reihenfolge der entstandenen Liste entspricht:
PListe={{x0*y0*z0 ... x0*y0*ze, x0*y1*z0 ... x0*y1*ze, ... }; ze=Letzte Element von z
Jetzt habe ich aus der PListe noch Permutationen zu finden, die mit allen Kombinationen von {{LowX,LowY,HighZ},{LowX,HighY,LowZ},...} zu finden sind, das Problem fängt für mich dort an, wenn Länge von LowX!=HighX und/oder LowY!=HighY und/oder LowZ!=HighZ. D.h. aus LowX*LowY*LowZ Möglichkeiten wird (LowX*LowY*LowZ)*(LowX*LowY*HighZ) an Möglichkeiten usw.
Dachte erst an sowas:
int Quantity; double QElements[3]; double *PNeu; PNeu=(double *)calloc((LowX*LowY*LowZ)*(LowX*LowY*HighZ),sizeof(double)); for(q=0;q<(LowX*LowY*LowZ)*(LowX*LowY*HighZ);q++) { for(i=0;i<LowX;i++) for(j=0;j<LowY;j++) for(k=0;k<HighZ;k++) { QElements[2]=CoeffHighZ[k]; QElements[1]=CoeffLowY[j]; QElements[0]=CoeffLowX[i]; PNeu[Quantity]=PListe[Quantity%(LowX*LowY*LowZ)]; // Modulo Operation PNeu[Quantity]*=QElements[2]; PNeu[Quantity]*=QElements[1]; PNeu[Quantity]*=QElements[0]; Quantity++; } }
Obiges gilt nur, wenn die Listen gleich lange sind, wenn sie es nicht sind, laufe ich Gefahr den falschen Wert zu nehmen. D.h. wenn HighX ungleich lang ist wie LowX, wie springe ich an die richtige Stelle ? Wie bastel ich daraus einen passenden Algorithmus ? Jeder Schubser ist mir recht, so lang er hilft.
Danke schonmal vorhinein. Winn