2012-08-03 8 views
7

Ich bin auf der Suche nach einer allgemeinen Priorität Warteschlange in R. Hat R eine universelle Prioritätswarteschlangenimplementierung (Paket) wie Java PriorityQueue Klasse oder Python heapq?Hat R eine Prioritätswarteschlange wie Java's PriorityQueue?

+0

http://en.wikipedia.org/wiki/Priority_queue für das Hintergrundlesen für den Fall, dass jemand es implementieren möchte – Spacedman

+0

Sieht nicht nach viel Arbeit aus, und es sieht so aus, als könnte es Spaß machen. Schade, dass ich heute nach Ikea muss ...;) –

+0

Ich erinnere mich, dass ich so etwas mit Rredis gemacht habe, das nur eine Stunde oder so dauerte, um es zusammen zu werfen. – Hansi

Antwort

1

Sie könnten wahrscheinlich das schaffen ganz einfach selbst, entweder Klassen (Referenz Klassen passen am besten) oder ein data.frame mit einem benutzerdefinierten Typ verwenden, mit einigen Funktionen kombiniert, die auf ihn arbeiten (add_to_queue(element, queue_object, priority), get_item(queue_object)). Diese Funktionen wären die Methoden für die Referenzklasse. Ich mag die Referenzklassenlösung besser, da sie sowohl den Zustand als auch die Logik an einem Ort speichert.

2

Sie können folgende implementation from Rosetta Code, verwenden aber das Einsetzen Vorsicht nimmt O (n log n)

PriorityQueue <- function() { 
    keys <<- values <<- NULL 
    insert <- function(key, value) { 
    temp <- c(keys, key) 
    ord <- order(temp) 
    keys <<- temp[ord] 
    values <<- c(values, list(value))[ord] 
    } 
    pop <- function() { 
    head <- values[[1]] 
    values <<- values[-1] 
    keys <<- keys[-1] 
    return(head) 
    } 
    empty <- function() length(keys) == 0 
    list(insert = insert, pop = pop, empty = empty) 
} 
5

Ich ging weiter und eine grundlegende Warteschlange als R Referenzklasse implementiert. Die Details finden Sie unter here. Es wurde um eine Prioritätswarteschlange erweitert, wie in der Dokumentation here dokumentiert.

Die grundlegenden und prioritären Warteschlangenimplementierungen sind jetzt als liqueueR-Paket auf CRAN verfügbar, mit einer Entwicklungsversion unter GitHub.

Verwandte Themen