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(nlog⁡n)

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(nlog⁡n)
— David Eppstein

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

Θ(nlog⁡n)O(n)o(nlog⁡n)

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

Antworten:


8

O(nlog⁡log⁡n)⊂o(nlog⁡n)

O(nlog⁡log⁡n)nwO(nlog⁡log⁡n)

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.