2013-07-04 7 views
8

Sei A1,A2,...,An reelle Zahlen zwischen [0,2k] (k ist konstant). Es ist bekannt, dass für jedes Paar Ai,AJ dann |Ai-Aj|>=k/n,Sortiere eine Reihe von n Zahlen zwischen [0,2k], wobei zwischen jedem Paar existiert: | Ai-Aj |> = k/n

Beschreiben Sie einen Algorithmus sortiert die Zahlen in O(n) Laufzeit Worst-Case.

Ich weiß, dass die Antwort Eimer-sort sein sollte. Kann nicht verstehen, warum, Und wenn ja, wie wähle ich die richtige Menge an Eimern? Wie hilft die |Ai-Aj|>=k/n eigentlich?

Antwort

7

Die Bedingung | A i - A j | ≥ k/n bedeutet, dass, wenn Sie den Bereich [0, 2k] in 2n verschiedene Buckets aufteilen (von denen jeder die Größe 2k/2n = k/n hat), kann es höchstens eine Zahl in jedem Bereich geben (außer möglicherweise if) die Zahlen befinden sich an den Endpunkten der Buckets.) Wenn Sie die Buckets enger erstellen (z. B. durch Erstellen von 3n-Buckets), hat jeder Bucket eine Größe von weniger als k/n und kann daher höchstens eine Zahl enthalten.

Sie dann die Nummern durch Verwendung einer Bucketsort Algorithmus sortiert werden kann:

  • Eine Anordnung von 3N Schaufeln, die jeweils den Bereich [(2k/3N) i, (2k/3N) (i + 1))
  • Für jede Nummer:
    • Teilen Sie diese Zahl mit (2k/3n), um zu bestimmen, in welchen Bucket sie platziert werden soll.
    • Platzieren Sie die Nummer in diesem Bereich.
  • Für jede Schaufel:
    • Wenn dieser nicht leer ist bucket, schreiben die Zahl in dem Eimer in den Ergebnis-Array.

Der erste Schritt dauert O (n) Zeit, da man ein Array der Größe 3N ist zu schaffen. Der nächste Schritt benötigt Zeit O (n), da Sie jede der O (n) -Zahlen einmal besuchen und O (1) bei jedem Schritt arbeiten. Der letzte Schritt dauert auch O (n) Zeit, da Sie insgesamt 3n Buckets besuchen.

Hoffe, das hilft!

+1

Integer-Sortierung FTW! –

+0

@templatetypedef da jedes Paar '> = k/n' ist, also nicht' 2n' Buckets der Größe 'k/n' ausreichend? Sage "n = 8, k = 30" und die Zahlen sind: "0,4,7,12,15,18,22,25", dann "B0 = 0", "B1 = 4", "B2 = 7", "B3 = 12", "B4 = 15", "B5 = 18", "B6 = 22", "B7 = 25", Restbehälter leer? Ich meine, jeder Eimer hat entweder 0 oder max. 1 Nummer. –

Verwandte Themen