R是否有像Java的PriorityQueue这样的优先级队列?

时间:2012-08-03 03:52:38

标签: r priority-queue

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

4 个答案:

答案 0 :(得分:5)

我继续将基本队列实现为R Reference Class。详细信息可以在here找到。它被扩展为处理优先级队列,如记录here

基本和优先级队列实现现在作为CRAN上的liqueueR包提供,其开发版本为GitHub

答案 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