Warunek | A i - Aj | ≥ k/n oznacza, że jeśli dzieli się przedział [0, 2k] na 2n różnych wiader (z których każdy ma rozmiar 2k/2n = k/n), w każdym zakresie może znajdować się co najwyżej jedna liczba (z wyjątkiem liczby znajdują się w punktach końcowych kubełków.) Jeśli tworzysz pojemniki mocniej (powiedzmy, tworząc wiadra 3n), wtedy każdy pojemnik ma rozmiar mniejszy niż k/n, a zatem może zawierać najwyżej jedną liczbę.
Można następnie posortować liczby stosując algorytm wiadro sortowania:
- utworzyć tablicę 3n czerpaki, z których każdy reprezentuje przedziale [(2k/3N) i (2k/3n) (I + 1))
- Dla każdego numeru:
- Podziel tę liczbę przez (2k/3n), aby określić, w którym wiadrze umieścić.
- Umieść numer w tym wiadrze.
- Dla każdego segmentu:
- Jeśli że wiadro jest niepusty, zapisz numer w tym wiadrze do tablicy wynikowej.
pierwszy etap trwa O (n), gdyż podczas tworzenia tablicę wielkości 3n. Kolejny krok zajmuje czas O (n), ponieważ odwiedzasz każdą z liczb O (n) i wykonujesz O (1) przy każdym kroku. Ostatni etap zajmuje również O (n) czas, ponieważ odwiedzasz w sumie 3n wiader.
Mam nadzieję, że to pomoże!
sortowanie liczb całkowitych FTW! –
@templatetypedef od każdej pary '> = k/n', więc czyż nie wystarczą' wiadra '2n' o rozmiarze' k/n'? Powiedz "n = 8, k = 30", a liczby to: "0,4,7,12,15,18,22,25", następnie "B0 = 0", "B1 = 4", "B2 = 7", 'B3 = 12',' B4 = 15', 'B5 = 18',' B6 = 22', 'B7 = 25', czy wiadra reszta są puste? Mam na myśli, że każdy kubeł będzie miał 0 lub max. 1 numer. –