2012-08-03 21 views
7

Estoy buscando una cola de prioridad de propósito general en R. ¿R tiene alguna implementación de cola de prioridad de uso general (paquete) como la clase Java PriorityQueue o Python heapq?¿Tiene R una cola de prioridad como PriorityQueue de Java?

+0

http://en.wikipedia.org/wiki/Priority_queue para leer en segundo plano en caso de que a alguien le guste implementarlo – Spacedman

+0

No parece que haya mucho trabajo, y parece que podría ser divertido. Lástima que tenga que ir a Ikea hoy ...;) –

+0

Recuerdo que hacer algo como esto con rredis solo tomó una hora o más para lanzar juntos. – Hansi

Respuesta

1

Probablemente se podría crear esto con bastante facilidad a ti mismo, ya sea mediante clases (clases referencia se adaptan mejor), o utilizando un data.frame con un tipo personalizado, combinado con algunas funciones que operan en el mismo (add_to_queue(element, queue_object, priority), get_item(queue_object)). Estas funciones serían los métodos en el caso de la clase de referencia. Me gusta más la solución de la clase de referencia, ya que almacena el estado y la lógica en un solo lugar.

2

Usted puede usar la siguiente implementation from Rosetta Code, pero ten en cuenta que la inserción toma 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

que siguió adelante e implementé una cola básica como una Referencia de la Clase R. Los detalles se pueden encontrar here. Se ha extendido para manejar una cola de prioridad, como se documentó en here.

Las implementaciones de cola básica y de prioridad ahora están disponibles como el paquete liqueueR en CRAN, con una versión de desarrollo en GitHub.

Cuestiones relacionadas