我正在寻找一个通用的优先级队列R
。R 是否有任何通用优先级队列实现(包),如 JavaPriorityQueue
类或 Python heapq
?
问问题
2664 次
4 回答
2
您可以使用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)
}
于 2013-05-20T23:37:15.190 回答
1
你可以很容易地自己创建它,或者使用类(引用类最适合),或者使用data.frame
带有自定义类型的 a ,并结合一些对其进行操作的函数(add_to_queue(element, queue_object, priority)
, get_item(queue_object)
)。在引用类的情况下,这些函数将是方法。我更喜欢参考类解决方案,因为它将状态和逻辑都存储在一个地方。
于 2012-08-03T09:08:06.553 回答
1
Checkout the package collections: https://cran.r-project.org/web/packages/collections/index.html
q <- PriorityQueue()
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
EDIT: update syntax for collection v0.2.0
于 2019-03-07T22:10:09.710 回答