To interesujące pytanie znalazłem w Internecie. Biorąc pod uwagę tablicę zawierającą n liczb (bez informacji o nich), powinniśmy wstępnie przetworzyć tablicę w czasie liniowym, abyśmy mogli zwrócić k najmniejszych elementów w czasie O (k), gdy otrzymamy liczbę 1 <= k <= n
Dyskutowałem o tym problemie z przyjaciółmi, ale nikt nie mógł znaleźć rozwiązania; każda pomoc będzie mile widziana!
krótkie uwagi: - kolejność k najmniejszych elementów nie jest ważna - elementy w tablicy są liczbą, mogą być liczbami całkowitymi i mogą nie być (więc brak sortowania w radix) - liczba k nie jest znana na etapie wstępnego przetwarzania. przetwarzanie wstępne to czas O (n). funkcja (znajdź k najmniejszych elementów) w czasie O (k).
Odpowiedzi:
Przetwórz wstępnie tablicę wartości w czasie O ( n ) :n O ( n )
Całkowity czas precomputation jest wO(1+2+4+...+n)⊆O(n)
Odpowiedz na zapytanie o najmniejszych elementów w A w czasie O ( k ) :k A O(k)
zawiera k najmniejszych elementów.A[1..k] k
Bibliografia:
źródło
źródło
Frederickson, Greg N. , Optymalny algorytm do selekcji w hałdzie min. , Inf. Comput. 104, nr 2, 197–214 (1993). ZBL0818.68065 ..
źródło
źródło