2010-09-11 18 views

Odpowiedz

32
> a <- c(1:100) 
> tail(sort(a),5) 
[1] 96 97 98 99 100 
+6

lub 'głowicy (rodzaj (a, zmniejszając = PRAWDA), 5) ' – Marek

+0

ogon jest nieznacznie szybszy niż głowy i zmniejszanie = PRAWDA > x <- rnorm (50000000) > system.time (ogon (sortowanie (x), 5)) układ użytkownik upływie 22,64 0,25 22,95 > system.time (łbem (sortowania (x, zmniejszając = PRAWDA), 5)) układ użytkownik upływie 23,26 0,20 23,51 – Thierry

+0

@Thierry można powinny uruchom to więcej niż raz i poświęć średni czas. Bo myślę, że nie ma różnicy (statystycznie rzecz biorąc) na podstawie moich symulacji. – Marek

2

Tak, head(X, 5) gdzie X jest twoim posortowanym wektorem.

3
tail(sort.int(x, partial=length(x) - 4), 5) 

Korzystanie sort.int z częściowym ma tę zaletę, że jest (potencjalnie) szybciej (potencjalnie) nie robi pełnego sortowania. Ale w rzeczywistości moja implementacja wydaje się nieco wolniejsza. Być może dzieje się tak dlatego, że przy częściowym parametrze! = NULL zamiast sortowania szybkiego używa się sortowania skorupowego?

> x <- 1:1e6 
> system.time(replicate(100, tail(sort.int(x, partial=length(x) - 4), 5))) 
    user system elapsed 
    4.782 0.846 5.668 
> system.time(replicate(100, tail(sort(x), 5))) 
    user system elapsed 
    3.643 0.879 4.854 
+0

Jeśli zamiast tego użyjesz x <-runif (1e6), zobaczysz korzyści. Zauważ, że te 5 wartości, które otrzymasz, byłyby rzeczywiście najwyższymi 5, ale niekoniecznie w porządku posortowanym. – Tommy

Powiązane problemy