Elementunterscheidbarkeit in O (n) -Zeit?


21

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.o(nlogn)

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 mitO(1) " 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 .O(1)

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ängeSnw 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 vonwh:S{1,,m}O(n)m=O(n)hj{1,,m} 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.Sjh(i)O(1)O(1)

Ich werde auch gerne wissen, ob es Algorithmen gibt, um die Elementunterscheidbarkeit im Wort-RAM zu lösen, die überhaupt keine Hash-Funktionen verwenden.


8
Betreff: "Ich möchte auch wissen, ob es Algorithmen gibt, um die Elementunterscheidbarkeit im Wort-RAM zu lösen, die überhaupt keine Hash-Funktionen verwenden." - Solange Sie nur " und nicht "linear" möchten, müssen Sie das Wort "RAM" sehr genau sortieren (siehe en.wikipedia.org/wiki/Integer_sorting ). Einige dieser Algorithmen verwenden Hashing, andere nicht. o(nlogn)
David Eppstein

Sind ungefähre Lösungen zulässig?
AT

Θ(nlogn)O(n)o(nlogn)

Ist die Sortierung von Radix für Sie zu langsam?
Thomas Mueller

Antworten:


8

O(nloglogn)o(nlogn)

O(nloglogn)nwO(nloglogn)

Soweit ich weiß, ist dies das beste bis heute bekannte Ergebnis.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.