Wir alle wissen, dass die Elementunterscheidbarkeit im vergleichsbasierten Modell nicht in der Zeit kann. Auf einem Wort-RAM kann man jedoch möglicherweise bessere Ergebnisse erzielen.
Wenn man davon ausgeht, dass es eine perfekte Hash-Funktion gibt, die in linearer Zeit berechnet werden kann, erhält man natürlich einen linearen Zeitalgorithmus für die Unterscheidbarkeit der Elemente: Behalten Sie einfach das Hashing der Zahlen nacheinander bei und geben Sie 1 zurück, wenn es zu einer Kollision kommt.
Es gibt jedoch zwei Probleme: 1) Die meisten Konstruktionen perfekter Hash-Funktionen, die ich finden konnte, verwendeten Zufall und 2) Ich kann nirgends eine Diskussion über die Vorverarbeitungszeit finden, dh die Zeit, die benötigt wird, um zu entscheiden, welche Hash-Funktion verwendet wird basierend auf der Eingabe Menge von Zahlen zu verwenden.
Fredman et al. Lösen mit " Speichern einer dünnen Tabelle mit -Zugriffszeit im ungünstigsten Fall " das erste Problem, indem sie im ungünstigsten Fall eine Hash-Funktion mit -Zugriffszeit bereitstellen , sagen jedoch nichts über das zweite Problem aus .
Zusammenfassend möchte ich Folgendes sagen:
Entwerfen Sie einen Algorithmus, der eine Menge von Zahlen (wobei jede Zahl Bit lang ist) in einem Wort-RAM mit der Wortlänge und eine Hash-Funktion h findet : S → { 1 , … , m } in O ( n ) Zeit mit m = O ( n ) . Die Funktion h sollte die Eigenschaft haben, dass für jedes j ∈ { 1 , … , m } die Anzahl der Elemente von dass Karte j eine KonstanteundRechen h ( i ) sollte nehmen O ( 1 ) Zeit in einem „vernünftigen“ Wort-RAMModell,heißt, sollte das Modell nicht „exotische“ Funktionen auf Worte erlaubt in ausgewertet werden OS ( 1 ) zeit.
Ich werde auch gerne wissen, ob es Algorithmen gibt, um die Elementunterscheidbarkeit im Wort-RAM zu lösen, die überhaupt keine Hash-Funktionen verwenden.