Betrachten Sie das folgende Problem:
Eingabe : Listet von ganzen Zahlen auf
Ziel : Bestimmen Sie, ob in beiden Listen eine Ganzzahl ist.
Angenommen, beide Listen die Größe n . Gibt es für dieses Problem einen deterministischen linearen Zeitalgorithmus? Mit anderen Worten, können Sie dieses Problem in O ( n ) -Zeit deterministisch lösen , ohne Zufälligkeit zu verwenden?
Leider können Sie nicht davon ausgehen, dass die Listenelemente alle klein sind.
Ich kann sehen, wie man es in erwarteter Zeit mit einem zufälligen Algorithmus löst : Wähle zufällig eine 2-universelle Hash-Funktion h , speichere die Elemente von X in einer Hashtabelle (mit h als Hash-Funktion) und schaue dann nach jedes Element von Y, um zu sehen, ob es in der Hashtabelle ist. Die erwartete Laufzeit beträgt O ( n ) . Ich kann jedoch nicht sehen, wie man einen deterministischen Algorithmus mit O ( n ) Laufzeit findet. Wenn Sie versuchen, dies zu derandomisieren und eine bestimmte Hash-Funktion zu korrigieren, gibt es eine Worst-Case-Eingabe, die dazu führt, dass diese Prozedur ausgeführt wird Zeit. Der beste deterministische Algorithmus, den ich finden kann, besteht darin, die Werte zu sortieren, aber das ist keine lineare Zeit. Können wir eine lineare Laufzeit erreichen?
Ich kann auch sehen, wie man es in linearer Zeit löst, wenn man annimmt, dass alle Listenelemente Ganzzahlen im Bereich (im Grunde genommen zählen Sortieren) - aber ich bin daran interessiert, was im Allgemeinen passiert Fall, wenn wir das nicht annehmen können.
Wenn die Antwort vom Berechnungsmodell abhängt, fällt mir das RAM-Modell ein, aber ich würde mich für Ergebnisse für jedes vernünftige Berechnungsmodell interessieren. Mir sind die unteren Grenzen von für Entscheidungsbaumalgorithmen für die Eindeutigkeit von Elementen bekannt , aber dies ist nicht endgültig, da wir manchmal lineare Zeitalgorithmen finden können, selbst wenn ein Ω ( n log n ) gebunden ist das Entscheidungsbaummodell.
Antworten:
Sie können das Problem in linearer Zeit lösen, wenn Sie über genügend Speicher verfügen, um für jeden möglichen Wert in X und Y ein Bit zu haben. Dies führt zu keinen Einschränkungen bei der Reihenfolge von X und Y.
quelle
Da Sie sagen, dass die beiden Listen Ganzzahlen enthalten, können wir wahrscheinlich eine Radix-Sortierung für die beiden Listen ausführen und dann eine lineare Suche durchführen, bei der die beiden Listen nach äquivalenten Elementen verglichen werden.
quelle
quelle
quelle