Welche Elemente können Sie am effizientesten mit einer Liste von Elementen gruppieren? Wenn der Eingang {a,c,a,b,c,b,b}
ist, könnte ein gültiger Ausgang beispielsweise {a,a,b,b,b,c,c}
oder {b,b,b,c,c,a,a}
lauten. Wenn der Typ des Schlüssels eine Reihenfolge beobachtet, könnte ein Sortieralgorithmus verwendet werden, der uns eine Komplexität von O(nlogn)
geben würde.Effiziente Gruppierung von Elementen einer Liste
Der Schlüssel kann jedoch nur für die Gleichheit, nicht aber für die Reihenfolge vergleichbar sein. Zum Beispiel typeof(dog) != typeof(cat)
, aber es macht keinen Sinn zu fragen, ob typeof(dog) < typeof(cat)
.
Natürlich könnte die Reihenfolge erzwungen werden (z. B. obj.GetType().ToString()
und lexikalische Reihenfolge), aber da eine strikte Reihenfolge nicht notwendig ist (nur Gruppierung), habe ich mich gefragt, ob es einen effizienteren Weg als Sortieren gibt.
Wieviel Schlüssel haben Sie? O (n) oder viel kleiner? –
Sie wollen "in Place" Gruppierung oder es ist in Ordnung, die Elemente zu kopieren und eine andere sortierte Liste zu machen? –
@OhadEytan Anzahl der Schlüssel variiert, aber normalerweise ist es entweder nahe 1 oder nahe bei n. Ich würde einen "In-Place" -Algorithmus bevorzugen, da diese Operation an vielen Eingaben vorgenommen wird. – MikeM