Der-Dennis: (PHP) Gleichmäßige Sortierung

Beitrag lesen

Hallo Sebastian,

Wie man sieht, sind die Sendungen dort alphabetisch nach Namen sortiert in Gruppen gepackt (A-Z) und in Spalten gegliedert. Ähnlich wie bei der anderen Ansicht auf der Seite (der thematischen) sind beide Ansichten grob gesagt, platzsparend gesetzt. Will heissen: Sie haben in etwa so viele Einträge pro Spalte, dass die unteren Enden annährend ausgeglichen sind in Ihrer Höhe.

Ich frage mich wie man so eine Ausgleichung erreicht.

Bei diesen Beispielen vermute ich, dass das per Hand gemacht wird, da es keine großen Datenmengen sind.

Ansonsten kenn ich mich mit sowas auch nicht aus und hab im Netz nichts gefunden. Ich hab mir aber grad mal kurz Gedanken dazu gemacht, weil ich das echt interessant finde. Vielleicht können wir ja zusammen was erarbeiten.

Also, gehen wir mal von dem Beispiel mit den Buchstaben aus:

Wir können einfach berechnen, wie viele Elemente wir insgesamt haben und wie viele Elemente jeweils mit einem bestimmten Buchstaben anfangen. Die Buchstaben mit Anzahl schreiben wir in ein Array.

Außerdem wissen wir die Anzahl der gewünschten Spalten, sodass wir, wie Du bereits beschrieben hast, mit AnzahlEinträgeGesamt geteilt durch AnzahlderSpalten den optimalen Wert pro Spalte errechnen können.

Versuchen wir's mit ein bisschen Pseudo-Code:

  • Wir setzen eine Variable Summe
  • Durchlaufe das Buchstaben Array
  • Wenn Summe + aktuelleAnzahldesBuchstaben < BesterWert:
        Summe = Summe + aktuelleAnzahldesBuchstaben
  • Sonst wenn Summe + aktuelleAnzahldesBuchstaben > BesterWert:
        wenn BesterWert - Summe > Summe + aktuelleAnzahldesBuchstaben - BesterWert:
          Die beste Lösung ist die MIT dem aktuellen Buchstaben
        sonst:
          Die beste Lösung ist die OHNE den aktuellen Buchstaben
  • Sonst:
        Wir haben sogar die optimale Länge erreicht, können die Schleife abbrechen.
  • Ende der Schleife
  • Lösche die nun verwendeten Buchstaben aus dem Array, durchlaufe das Buchstaben-Array erneut und berechne für die nächste Spalte.

Ich weiß, das hört sich alles etwas kryptisch an. Aber vielleicht finden wir eine Lösung. Diese hier könnte schon ganz gut funktionieren, allerdings weiß ich nicht genau, wie es sich dann mit der letzten Spalte verhält. Die könnte, so wie ich das sehe, um einiges größer oder kleiner sein als die anderen.

Gruß, Dennis