2012-08-03 15 views
7

Sto cercando una coda di priorità per uso generale in R. R ha qualche implementazione (pacchetto) di priorità di priorità generale come la classe Java PriorityQueue o Python heapq?R ha una coda di priorità come PriorityQueue di Java?

+0

http://en.wikipedia.org/wiki/Priority_queue per la lettura di sottofondo nel caso in cui qualcuno sperimenti di implementarlo – Spacedman

+0

Non sembra molto lavoro, e sembra che potrebbe essere divertente. Peccato che io debba andare a Ikea oggi ...;) –

+0

Ricordo di aver fatto qualcosa del genere con Rredis che mi ci è voluta circa un'ora per gettare insieme. – Hansi

risposta

1

si potrebbe forse creare questa abbastanza facilmente da soli, sia utilizzando le classi (classi di riferimento in forma migliore), o utilizzando un data.frame con un tipo personalizzato, combinato con alcune funzioni che operano su di esso (add_to_queue(element, queue_object, priority), get_item(queue_object)). Queste funzioni sarebbero i metodi nel caso della classe di riferimento. Mi piace la soluzione della classe di riferimento meglio poiché memorizza sia lo stato che la logica in un unico punto.

2

È possibile utilizzare il seguente implementation from Rosetta Code, ma attenzione che l'inserimento prende 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

sono andato avanti e implementato una coda di base come una classe di riferimento R. I dettagli possono essere trovati here. È stato esteso per gestire una coda di priorità, come documentato here.

Le implementazioni di coda di base e prioritarie sono ora disponibili come pacchetto liqueueR su CRAN, con una versione di sviluppo su GitHub.

Problemi correlati