我正在寻找R
中的通用优先级队列。 R是否具有任何通用优先级队列实现(包),如Java PriorityQueue
类或Python heapq
?
答案 0 :(得分:5)
答案 1 :(得分: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)
}
答案 2 :(得分:1)
你可能很容易自己创建这个,要么使用类(参考类最适合),要么使用带有自定义类型的data.frame
,并结合使用它的一些函数(add_to_queue(element, queue_object, priority)
, get_item(queue_object)
)。这些函数将是引用类的方法。我更喜欢参考类解决方案,因为它将状态和逻辑存储在一个地方。
答案 3 :(得分:1)
检出软件包集合:https://cran.r-project.org/web/packages/collections/index.html
q <- PriorityQueue$new()
q$push("not_urgent")
q$push("urgent", priority = 2)
q$push("not_as_urgent", priority = 1)
q$pop() # urgent
q$pop() # not_as_urgent
q$pop() # not_urgent