2012-08-03 90 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