एक BinarySearchTree का उपयोग कर एक PriorityQueue लागू: जावा

वोट
4

मैं अपने एल्गोरिदम द्वितीय वर्ग के लिए एक प्राथमिकता कतार एक द्विआधारी खोज वृक्ष (बीएसटी) द्वारा लागू बनाने की जरूरत है। हालांकि, मुझे यकीन है कि वास्तव में कैसे आप एक प्राथमिकता कतार के रूप में एक द्विआधारी खोज वृक्ष का प्रयोग करेंगे नहीं हूँ। किसी को स्पष्ट कर सकते कि यह क्या है कि काम करने के लिए मुझे कह रहा है?

एक संदर्भ के रूप में, यहाँ तरीकों PriorityQueue को लागू करना चाहिए रहे हैं:

add – adds a new item to the queue
peek – returns the head of the queue
remove – removes the head of the queue and returns it
search – returns the position of an element in the queue, or -1 if it is not found.
size – returns the total number of elements in the queue
inorder – returns an in-order, comma-separated string of every element in the queue
preorder – returns an pre-order, comma-separated string of every element in the queue
height – returns the height of the underlying BST

किसी भी सलाह के लिए अग्रिम धन्यवाद !!

21/05/2011 को 22:50
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
0

एक द्विआधारी खोज वृक्ष कुशलतापूर्वक क्रमबद्ध क्रम में आइटम बनाए रखने के लिए प्रयोग किया जाता है। तरह-आदेश प्राथमिकता के आधार पर किया जाता है, तो अपने द्विआधारी पेड़ एक प्राथमिकता कतार बन जाता है। आप बंद पॉप सर्वोच्च प्राथमिकता आइटम, और उनकी प्राथमिकता के अनुसार नए आइटम सम्मिलित करें।

जोड़ने के लिए संपादित:

एक सबसे खराब स्थिति के साथ कैसे तुम कहाँ सूची है, जो है हे (एन) नीचे सभी तरह चलने से अन्य की तुलना में एक नया आइटम सम्मिलित करने के लिए, पता होगा यदि आप अपने कतार के रूप में एक लिंक्ड सूची का इस्तेमाल किया, - यह विकल्पों पर विचार करने के लिए मदद मिल सकती है एन एक द्विआधारी पेड़ का उपयोग की है कि समस्या का हल।

21/05/2011 को 22:57
का स्रोत उपयोगकर्ता

वोट
4

एक द्विआधारी खोज वृक्ष हमेशा आदेश दिया है और अगर नए आइटम डाला जाता है हमेशा क्रम में रहना होगा।

अन्य डेटा संरचनाओं पर द्विआधारी खोज के पेड़ के प्रमुख लाभ यह है कि संबंधित छँटाई एल्गोरिदम और जैसे इन-आदेश ट्रावर्सल के रूप में खोज एल्गोरिदम बहुत ही कुशल हो सकता है।

और वह अपने प्रधान कतार है। एक संभव कार्यान्वयन में, कम से कम प्राथमिकता के साथ आइटम सबसे अधिक संख्या में और सर्वोच्च प्राथमिकता के साथ आइटम प्राप्त सबसे कम संख्या मिल जाएगा होगा। इन मदों BST में डाला जाता है और आप इसे पढ़ते हैं inorder, तो आप जिस क्रम में कतार संसाधित किया जाना चाहिए है।

कतार संसाधन के लिए, आप पहली बार तत्व बंद "पॉप" पेड़ में और बाकी BST द्वारा स्वचालित रूप से आदेश दिया जा जाएगा।

केवल एक चीज के बारे में आप देखभाल करने के लिए है पेड़ में नए तत्व और क्या करता है, तो पहले एक निकाल दिया जाता है क्या होता है की सही प्रविष्टि है।

आपका तरीकों, पेड़ संचालन करने के लिए मैप किया जाएगा addसही जगह में एक नया आइटम सम्मिलित करता है और यदि आवश्यक हो तो पेड़, संशोधित sizeउदाहरण वापस पेड़ के आकार देता है के लिए, inorderपेड़ पार होगा।

आशा है कि यह थोड़ा स्पष्ट कर दिया।

21/05/2011 को 22:58
का स्रोत उपयोगकर्ता

वोट
0

झांकना निकालने जोड़ने एक BST के लिए मानक तरीके हैं

खोज के लिए आप प्रत्येक नोड में आकार जो सबट्री में तत्वों की वर्तमान संख्या जिनमें से नोड की जड़ है हो जाएगा कैश कर सकते (या दूसरे शब्दों में node.size = 1+ (node.right==null?0:node.right.size) + (node.left==null?0:node.left.size))

तो खोज हो जाता है

int search(E el,Node n){
    if(n==null)return -1;//stop recursion && nullpointer
    int comp = el.compareTo(n.value);
    if(comp==0)return n.left==null?0:node.left.size;
    else if(comp<0){
        return search(el,node.left);
    }else{
        int res = search(el,node.right)
        return res<0?res:res+(n.left==null?0:node.left.size)+1;//pass through -1 unmodified
    }
}
21/05/2011 को 23:08
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more