Sortieren erst nach Nachname oder Vorname?
Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
13.1: Radix-Sort
Hallo zusammen,
folgende Frage zur Aufgabe 13.1:
In der PDF-Datei steht: “[…] wobei zunächst nur nach dem Nachnamen und bei gleichen Nachnamen nach dem Vornamen sortiert wird.”
In der Methodenbeschreibung steht dagegen aber: “Sorts the supplied list, first by name, then by surname”.
Wie soll es denn nun aussehen?
Gruß
Ups, da wurde der Kommentar nicht ans Blatt angepasst Was auf dem Blatt steht, gilt. Die Vorgabe bessere ich dann aus. Danke für den Hinweis!
Soll nach Groß- und Kleinschreibung unterschieden werden?
Also C vor c, beispielsweise?
Ja, ergibt sich ja automatisch mit 53 Buckets.
Diese Frage ist jetzt etwas beschämend, aber:
Alle Großbuchstaben vor kleinbuchstaben? Also A vor z?
Hab es gerade mit AaBbCc hochgeladen, soweit ich sehe auch korrekt sortiert, und bekomme ein !.
Ja
Hab mal ne Frage:
Ab wievielen Buchstaben zaehlt ein String als Praefix eines anderen Strings?
Ist z.B Susi ein Praefix von Stefanie wegen dem ‘S’?
Wenn alle Buchstaben des kleineren Worts im größeren am Anfang in derselben Reihenfolge vorkommen, dann ist es ein Präfix. “Suse” ist z. B. kein Präfix von “Stefanie” und auch nicht von “Susanne”, aber z. B. von “Suse Linux”. Bei gleich langen Wörtern ist das eine Wort das Präfix vom anderen, wenn das auch gleiche Wörter sind.
ich hätte auch noch eine frage zur umsetzung… also ich bin soweit das ich entsprechennden buchstaben eines von den 53 buckets zuordne…
bekomme aber folgende Fehlermeldung “Exception in thread “main” java.lang.IndexOutOfBoundsException: Index: 44, Size: 5”
scheint also das ich in meiner ArrayList die ich neu angelegt habe kein NameEntry an der Stelle 44 speichern kann… muss ich meine neu erstellte ArrayList erst mit lauter "null"ern füllen damit ich 53 stellen habe?
… ich hatte das mal gemacht und dann habe ich auch eine ausgabe erhalten ohne fehlermeldung… jedoch wurde mir dann auch sehr oft “null” ausgedruckt…
… wer kann mir einen tipp geben was ich beachten sollte, bzw. was ich bei der Umsetzung falsch gemacht habe?
grundsätzlich hast du zwei Möglichkeiten.
[quote=[hedgehogs dilemma = 42]]
Das zweidimensionale Array finde ich persönlich einfacher.
[/quote]
Und ich platzverschwendender.
da habe ich ja glatt vergessen arraylists zur arraylist hinzuzufügen :'D
… ich frage mich jedoch warum ausgerechnet [100] in der 2.dimension eines einfachen arrays, haben wir wohl 100 Namen?
[100] war eine von mir zufällig gewählte Menge. Dabei kann ich 100 Namen zu 100% Wahrscheinlichkeit sortieren, bzw. solange sortieren bis ich auf eine Folge von Namen stoße bei der über 100 den gleichen Buchstaben an der gleichen Stelle haben.
Natürlich hat Volschaf recht. Das Array ist die “lazy” Methode. Verschwendet Platz und geht eventuell in die Knie.
Nach ein bischen googlen kann man es tatsächlich auch als Array[] von generischen ArrayLists implementieren, hab mich letztendlich aber dagegen entschieden, warum kann ich jetzt eigentlich auch nicht genau sagen. Wahrscheinlich weil man wieder die Warnings “unchecken” muss.
z.B:
ArrayList<String>[] lists = (ArrayList<String>[])new ArrayList[10];
Wobei mal interessant wäre, was die “effizienteste” Art und Weise wäre.
Ich hätte mal eine Frage zum allgemeinen Aufgabenverständnis. In der Aufgabenstellung wird ja folgendes verlangt:
Jetzt würde ich einfach mal schamlos behaupten, dass mein Code mittlerweile auch genau das Verlangte tut. Nur zweifel ich noch ein wenig an der Effizienz meiner Umsetzung. Wäre es denn so schlimm einfach direkt erst nach Vornamen und dann nach Nachnamen zu sortieren? Also ohne den Test ob überhaupt gleiche Nachnamen vorhanden sind?
Aktuell sortiere ich nach Nachnamen, gehe dann einmal durch die sortierte List und Teste die Nachnamen auf Gleichheit, bei eventuellen Treffern bau ich mir eine Subliste mit den betreffenden Namen und sortiere diese erneut, um die dann nach Vornamen sortierte Unterliste wieder in die ursprüngliche Liste an die richtige Position einzufügen. Der worst-case wäre also, wenn in der ursprünglichen Liste immer 2 Leute mit gleichem Nachnamen vorhanden wären, weil ich dann nochmal n/2 Sublisten bestehend aus nur jeweils 2 Namen einzeln sortieren würde, anstatt einfach direkt alle in einem Schwung erstmal nach dem Vornamen zu sortieren.
Wenn man erst die ganze Liste nach den Nachnamen sortiert, und anschließend nach den Vornamen, hat man ja das Problem, dass man danach erneut nach dem Nachnamen sortieren muss. Aber streng genommen ist natürlich O(aba*n) immer noch O(n) für n->unendlich (a = max Länge der Nachnamen, b = max Länge der Vornamen).
Gibt es denn noch eine andere Möglichkeit?
Geht denn etwas kaputt, wenn du das machst? Wenn nicht, wirds wohl OK sein
Ne, kaputt geht natürlich nichts, aber so handelt man ja quasi vorsätzlich wider der Aufgabenstellung, die da lautet:
Also ist es durchaus erwünscht automatisch erst nach den Vornamen zu sortieren? Anstatt wie eigentlich verlangt erst ausschließlich nach Nachnamen zu sortieren, dann die Nachnamen auf Gleichheit testen und bei eventuellem Auftreten gleicher Nachnamen, die ganze Liste nach Vornamen sortieren, gefolgt von einem erneuten Sortieren nach Nachnamen?
Dann hab ichs mir jetzt mit meinen Unterlisten doch ganz schön umständlich gemacht :rolleyes:
Da hast du etwas hineingelesen, was gar nicht beabsichtigt war. Der Text sollte eigentlich nur aussagen, dass der Vorname erst dann relevant wird, wenn die Nachnamen identisch sind.
Oh Mann, aber gut, danke für die klärenden Worte. Eine letzte Frage hab ich allerdings noch: sollte man die der sortEntries()-Methode übergebene Liste als “Immutable Object” behandeln? Sprich, darf ich wunderbar mit der Liste selbst arbeiten (was ich bisher tue) oder sollte man lieber die Finger von der Liste lassen?