8

我正在寻找一个通用的优先级队列R。R 是否有任何通用优先级队列实现(包),如 JavaPriorityQueue类或 Python heapq

4

4 回答 4

5

我继续并实现了一个基本队列作为 R 参考类。详细信息可以在这里找到。它已被扩展以处理优先级队列,如此所述。

基本和优先队列实现现在可以作为 CRAN 上的liqueueR包使用,在GitHub 上有开发版本。

于 2013-11-26T05:51:35.087 回答
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 回答