Angenommen, Sie haben eine Reihe von Mengen von ganzen Zahlen. Es ist möglich, dass sich einige der Sets überschneiden (dh Elemente gemeinsam nutzen). Sie könnten die Überlappungen beseitigen, indem Sie Elemente aus den Sets löschen. Einige davon könnten jedoch leer sein. dass wäre eine Schande. Können wir alle Sätze disjunkt machen, ohne sie zu leeren?
Beachten Sie, dass es in dieser Situation keinen Grund gibt, mehrere Elemente in einem Satz zu belassen. Daher kann dieses Problem immer gelöst werden, indem jeder Satz auf nur ein Element reduziert wird. Das ist die Version des Problems, das wir hier lösen.
Die Aufgabe
Schreiben Sie ein Programm oder eine Funktion wie folgt:
Eingabe : Eine Liste von Ganzzahlensätzen.
Ausgabe : Eine Liste von Ganzzahlen mit der gleichen Länge wie die Eingabe, für die:
- Alle Ganzzahlen in der Ausgabe sind unterschiedlich. und
- Jede Ganzzahl in der Ausgabe ist ein Element der entsprechenden Menge der Eingabe.
Klarstellungen
- Sie können eine Menge als Liste darstellen, wenn Sie dies wünschen (oder was auch immer für Ihre Sprache geeignet ist), ohne die Reihenfolge der Elemente zu berücksichtigen.
- Sie müssen den Fall nicht behandeln, in dem keine Lösung vorhanden ist (dh es wird immer mindestens eine Lösung geben).
- Möglicherweise gibt es mehr als eine Lösung. Ihr Algorithmus muss immer eine gültige Lösung erstellen, darf jedoch nicht deterministisch sein (dh es ist in Ordnung, wenn er bei jeder Ausführung eine andere gültige Lösung auswählt).
- Die Anzahl der verschiedenen Ganzzahlen, die in der Eingabe n erscheinen, entspricht der Anzahl der Mengen in der Eingabe und der Einfachheit halber sind die Ganzzahlen von 1 bis einschließlich n (da ihre tatsächlichen Werte keine Rolle spielen). Es liegt an Ihnen, ob Sie diese Tatsache ausnutzen möchten oder nicht.
Testfälle
[{1,2},{1,3},{1,4},{3,4}] -> [2,3,1,4] or [2,1,4,3]
[{1,3},{1,2,4},{2,3},{3},{2,3,4,5}] -> [1,4,2,3,5]
[{1,3,4},{2,3,5},{1,2},{4,5},{4,5}] -> [1,3,2,4,5] or [3,2,1,4,5] or [1,3,2,5,4] or [3,2,1,5,4]
Siegbedingung
Ein Programm benötigt eine optimale Zeitkomplexität , um zu gewinnen. Wenn also ein Algorithmus mit einer besseren Zeitkomplexität gefunden wird, werden alle langsameren Einträge disqualifiziert. (Sie können davon ausgehen, dass die integrierten Funktionen Ihrer Sprache so schnell wie möglich ausgeführt werden, z. B. können Sie davon ausgehen, dass eine integrierte Sortierung in der Zeit O (n log n) ausgeführt wird. Ebenso können Sie davon ausgehen, dass alle Ganzzahlen mit einer vergleichbaren Größe wie n addiert, multipliziert usw. in konstanter Zeit.)
Da es in den meisten Sprachen wahrscheinlich ziemlich einfach ist, eine optimale Zeitkomplexität zu erhalten, ist der Gewinner das kürzeste Programm unter denjenigen mit der in Bytes gemessenen Zeitkomplexität.