2012-08-03 54 views
7

我正在尋找一個通用優先級隊列R。 R是否具有Java PriorityQueue類或Python heapq之類的通用優先級隊列實現(包)?R有像Java的PriorityQueue這樣的優先級隊列嗎?

+0

http://en.wikipedia.org/wiki/Priority_queue適合背景閱讀,以防萬一任何人想到實現它 – Spacedman 2012-08-03 08:12:58

+0

看起來不像很多工作,它看起來可能很有趣。太糟糕了你我今天必須去宜家...;) – 2012-08-03 09:09:36

+0

我記得用rredis做這樣的事情只花了一個小時左右的時間就扔在一起。 – Hansi 2012-08-03 10:35:16

回答

1

你也許可以創建這個很容易自己,無論是使用類(參考類最爲合適),或者使用與data.frame自定義類型,與它(add_to_queue(element, queue_object, priority)get_item(queue_object))操作一些功能相結合。這些函數將是參考類中的方法。我更喜歡參考級解決方案,因爲它將狀態和邏輯存儲在一個地方。

2

您可以使用下面的implementation from Rosetta Code,但要注意插入需要爲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

我繼續實施了基本隊列作爲R參考類。詳情可以在here找到。它已被擴展爲處理優先隊列,如記錄here

基本和優先級隊列實現現在可作爲CRAN上的liqueueR包使用,其開發版本爲GitHub