minimale Gewichtsunterschiede

El Hadji

Bekanntes Mitglied
Servus Community,
dydvlwyp0ui0ul2vk.png


Das Beispiel ist eigentlich total einfach aber irgendwie klappt mein Code nicht.
Rein theorethisch würde es ja auch genügen die Athleten nach dem Gewicht zu sortieren und den schwersten gegen den 2tschwersten,....,den 2. leichtesten, gegen den leichtesten antreten zu lassen. Aber ich wollte auf Nummer sicher gehen und alle Paare durch probieren bzw. durch tauschen. Aber irgendwo ist ein Fehler
Code:
  double geringsterUnterschied = Double.MAX_VALUE;
Ich wäre euch wieder dankbar für Anregungen
mfg El Hadji
       double unterschiede = 0;
       Teilnehmer [] sortiert = new Teilnehmer [dieTeilnehmer.length];
       Teilnehmer[][] beste = new Teilnehmer [dieTeilnehmer.length / 2][2];
      
       for(int i = 0; i < dieTeilnehmer.length-1; i++)
       {
         
           for(int j = 1; j < dieTeilnehmer.length; j++)
           {
               unterschiede = 0;
               Teilnehmer merk = dieTeilnehmer[j];
               dieTeilnehmer[j] = dieTeilnehmer[j-1];
               dieTeilnehmer[j-1] = merk;
              
               for(int k = 0; k < dieTeilnehmer.length-2; k++)
               {
                  
                   unterschiede += Math.sqrt((dieTeilnehmer[k].getGewicht()-dieTeilnehmer[k+1].getGewicht())*(dieTeilnehmer[k].getGewicht()-dieTeilnehmer[k+1].getGewicht()));
                   k++;
                }
               
                if(unterschiede <geringsterUnterschied)
                {
                    geringsterUnterschied = unterschiede;
                    for(int z = 0; z < dieTeilnehmer.length; z++)
                    {
                        sortiert[z] = dieTeilnehmer[z];
                       
                    }
                }
            }
        }
       
        for(int i = 0; i < beste.length; i++)
        {
            for (int j =0; j <2; j++)
            {
                beste[i][j] = sortiert[2*i+j];
            }
        }
       return beste;
    }
}
 

mihe7

Top Contributor
Rein theorethisch würde es ja auch genügen die Athleten nach dem Gewicht zu sortieren und den schwersten gegen den 2tschwersten,....,den 2. leichtesten, gegen den leichtesten antreten zu lassen.
Ja.

Aber irgendwo ist ein Fehler
Ja.

Ich wäre euch wieder dankbar für Anregungen
Nimm einen Zettel, schreib ein paar Teilnehmer-Paare drauf (bzgl. des Gewichts natürlich möglichst unsortiert) und geh Deinen Algorithmus Schritt für Schritt auf dem Papier durch.
 

El Hadji

Bekanntes Mitglied
mihe7 hat gesagt.:
Nimm einen Zettel, schreib ein paar Teilnehmer-Paare drauf (bzgl. des Gewichts natürlich möglichst unsortiert) und geh Deinen Algorithmus Schritt für Schritt auf dem Papier durch.

stimmt ich tausche ja nur die Array von vorne nach hinten. Ich bräuchte eine komplette Permutation, bei einer array größe von 5 wären das ja schon 120 möglichkeiten. Da rechnet BlueJ viel zulang oder?
 

stg

Top Contributor
es sollte ohne rekursion gehen
"Es geht immer ohne Rekursion"

stimmt ich tausche ja nur die Array von vorne nach hinten. Ich bräuchte eine komplette Permutation, bei einer array größe von 5 wären das ja schon 120 möglichkeiten. Da rechnet BlueJ viel zulang oder?

Alle Permutationen durchzuprobieren dauert natürlich sehr lange, bei entsprechend großen Teilnehmerzahlen.
Allein aufgrund von Symmetrie-Überlegung fallen aber schon etliche davon weg.
Bei 4 Teilnehmern brauchst du von 24 möglichen Permutationen lediglich 3 zu betrachten.
Bei 6 Teilnehmern bleiben von den 720 möglichen auch nur 15 übrig...
 

Ähnliche Java Themen

Neue Themen


Oben