genaue Anzahl der Operationen in Schleifen

BlackSalad

Bekanntes Mitglied
Hey,

wie muss ich denn an sowas rangehen, wenn ich mehrere Schleifen habe, um dann eine Formel zu bekommen, die mir genau die Anzahl der Basisoperationen berechnet?

Wenn ich jetzt zum Beispiel folgendes habe:


Ich habe zum Beispiel eine Funktion f diese besteht aus n vielen Schleifen und jede schleife kann beliebig also p mal durchlaufen werden. Und diese n vielen Schleifen sind ineinander verschachtelt. Und in jeder Schleife befindet sich eine Funktion. die funktion hat z0 basisioperationen und die nächste hat z1 basisoperationen usw.
in der innersten Schleife befindet sich auch wieder genau eine funktion.

und ich kriege quasi in nem eindimensionalen array v[] die Anzahl der Basisoperationen für die werte z0-zn übergeben und genauso auch die Anzahl Schleifendurchläufe. Diese werden durch p übergeben.

Ich hab mir darüber schon gedanken gemacht und habe mir folgendes überlegt:

Ich löse das ganze in einer Schleife. und zwar so irgendwie:

dass ich erst die anzahl der schleifen durchläufe errechne und dies quasi mit p*n errechne. Also quasi die anzahl der schleifen mal die durchläufe der schleifen.

und dass ich dann die neu errechneten schleifendurchläufe mit den im array gespeicherten werden multipliziere.

also dann quasi v*neuErrechneteSchleifendurchläufe.

Und das in eine scleife packe, sodass dass quasi alle werte in i multipliziert werden.

Aber leider komm ich so nicht auf die richtige Lösung.


Kann mir vielleicht jemand erklären wo mein Fehler liegt?

Ich möchte keinen fertigen Quellcode, sondern meinen Fehler erkennnen.


Danke schonmal


LG
result += a * k+6*k;
 
Was ist die richtige lösung und was ist genau deine Lösung?

Was ist deine Datengrundlage? Ein Stück code oder schon anlaysiert und in bestimmten Datenstrukturen?

Was wird erwartet? Ein Code, der das berechnet oder eine Formel zu einem ggb. Stück Code?
 
die richtige Lösung würde die Basisoperationen richtig zählen. Meine tut das nicht. Was mein Lösungsansatz ist habe ich schon geschrieben.

Die Anzahl der Basisoperationen soll für eine Funktion f berechnet werden. diese besteht aus n vielen Schleifen und jede schleife kann beliebig also p mal durchlaufen werden. Und diese n vielen Schleifen sind ineinander verschachtelt. Und in jeder Schleife befindet sich eine Funktion g. die funktion hat z0 basisioperationen und die nächste hat z1 basisoperationen usw.
in der innersten Schleife befindet sich auch wieder genau eine funktion wie g.


Nun brauch oder suche ich nach einer formel oder nach einer schleife mit formel, die mir die Basisoperationen auf grundlage eines übergebenen arrays v[] und einem wert p, ermittelt.

Dabei ist p die anzahl der schleifen und im array v[] werden die Anzahl der Basisoperationen für die funktionen g übergeben.
 
die richtige Lösung würde die Basisoperationen richtig zählen. Meine tut das nicht. Was mein Lösungsansatz ist habe ich schon geschrieben.

*g* Naja da du weißt, dass deine Lösung falsch ist, nahm ich an, dass du eine Musterlösung hast.

Dein Lösungsansatz ist "quasi" fast nicht nachzuvollziehen. (Jedenfalls für mich nicht)

Ich würde damit anfangen, dass ich das für einen konkreten Fall anschaue und dann allgemein formulieren.
 
Java:
void f(int n){
g0(); // Kostet z0 Basisoperationen

for (int i_1 = 0; i_1 < p; ++i_1){
     g1(); // Kostet z1 Basisoperationen
     
     for(int i_2 = 0; i_2 < p; ++i_2){
          g2(); // Kostet zn Basisoperationen

           }
      }
}

Wenn ich jetzt sowas zum Beispiel als Beispiel nehmen würde. und dann sagen würde es wird erst mal nichts fpr g1 und g2 übergeben, sodass ich mich in aller Ruhe auf die Schleifen konzentrieren kann.

für p=1 -> 8 Basisoperationen.

im prinzip p*2*n + 2*n

wenn p die Anzahl der durchläufe pro Schleife und n die anzahl der schleifen ist.

Soweit müsste es doch stimmen oder?

und nun muss ich ja im prinzip nur noch die Funktionen g1, g2 uswm mit rein kriegen.
 
Du hast also

für n= 1 (Eine Schleife)

AnzBasis1 = z0 + p *z1

für n =2 (Zwei Schleifen)

anzBasis2 = anzBasis1 + p^2 * z2

für n = x

anzBasisx = anzBasis_x-1 + p ^x * z_x
 

Zurück
Oben