2012-08-03 18 views
7

मैं R में एक सामान्य उद्देश्य प्राथमिकता कतार की तलाश में हूं। क्या आर का कोई सामान्य उद्देश्य प्राथमिकता कतार कार्यान्वयन (पैकेज) जावा PriorityQueue वर्ग या पायथन heapq है?क्या आर की प्राथमिकता कतार जावा की प्राथमिकता क्यूई है?

+0

http://en.wikipedia.org/wiki/Priority_queue पृष्ठभूमि पढ़ने के लिए अगर कोई भी इसे लागू करने वाली प्रशंसकों – Spacedman

+0

अधिक काम की तरह दिखता नहीं है, और ऐसा लगता है कि यह मजेदार हो सकता है। बहुत बुरा आपको आज Ikea जाना है ...;) –

+0

मुझे याद है कि इस तरह कुछ ऐसा करने के साथ ही एक साथ फेंकने के लिए केवल एक घंटा या तो लिया। – Hansi

उत्तर

1

आप शायद इस काफी आसानी से अपने आप बना सकते हैं, या तो वर्गों का उपयोग करना (संदर्भ वर्गों सबसे अच्छा फिट), या एक कस्टम प्रकार के साथ एक data.frame, कुछ कार्यों है कि यह (add_to_queue(element, queue_object, priority), get_item(queue_object)) पर संचालित के साथ संयुक्त का उपयोग कर। संदर्भ वर्ग के मामले में ये कार्य विधियां होंगी। मुझे संदर्भ वर्ग समाधान बेहतर पसंद है क्योंकि यह एक ही स्थान पर राज्य और तर्क दोनों को संग्रहीत करता है।

2

आप निम्न implementation from Rosetta Code उपयोग कर सकते हैं, लेकिन यह प्रविष्टि सावधान रहना लेता है O (n 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

मैं आगे चला गया और एक अनुसंधान संदर्भ क्लास के रूप में बुनियादी कतार कार्यान्वित किया। विवरण here पाया जा सकता है। इसे here दस्तावेज के रूप में प्राथमिकता कतार को संभालने के लिए बढ़ा दिया गया है।

मूल और प्राथमिकता कतार कार्यान्वयन अब GitHub पर विकास संस्करण के साथ, CRAN पर liqueueR पैकेज के रूप में उपलब्ध हैं।

संबंधित मुद्दे