Εφαρμογή ενός ουρά προτεραιότητας χρησιμοποιώντας ένα BinarySearchTree: Java

ψήφοι
4

Πρέπει να «δημιουργήσει μια ουρά προτεραιότητας υλοποιείται από ένα δυαδικό δέντρο αναζήτησης (BST)» για την τάξη μου αλγόριθμους II. Ωστόσο, δεν είμαι σίγουρος πώς ακριβώς θα χρησιμοποιούσατε ένα δυαδικό δέντρο αναζήτησης ως μια ουρά προτεραιότητας. Θα μπορούσε κάποιος να διευκρινίσει ποια είναι η αποστολή μου ζητά να κάνω;

Ως αναφορά, εδώ είναι οι μέθοδοι η ουρά προτεραιότητας πρέπει να εφαρμόσει:

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

Ένα δυαδικό δένδρο αναζήτησης χρησιμοποιείται για να διατηρήσει αποτελεσματικά στοιχεία σε ταξινομημένη σειρά. Αν το είδος τάξης βασίζεται σε προτεραιότητα, στη συνέχεια, δυαδικό δέντρο σας γίνεται μια ουρά προτεραιότητας. Μπορείτε ποπ από το υψηλότερο σημείο προτεραιότητα, και τοποθετήστε νέες θέσεις, ανάλογα με την προτεραιότητά τους.

Επιμέλεια να προσθέσει:

Μπορεί να βοηθήσει να εξετάσει τις εναλλακτικές λύσεις - αν χρησιμοποιηθεί μια συνδεδεμένη λίστα ως ουρά σας, πώς θα ξέρετε πού να εισάγετε ένα νέο στοιχείο, εκτός από με τα πόδια σε όλη τη διαδρομή προς τα κάτω στη λίστα, η οποία είναι O (N) με χειρότερη περίπτωση Ν Χρησιμοποιώντας ένα δυαδικό δέντρο λύνει αυτό το πρόβλημα.

Απαντήθηκε 21/05/2011 στις 22:57
πηγή χρήστη

ψήφοι
4

Μια Binary Search Tree είναι πάντα παραγγείλει και θα μείνει πάντα έτσι ώστε εάν εισάγονται νέα στοιχεία.

Το μεγάλο πλεονέκτημα των δυαδικών δέντρων αναζήτησης σε σχέση με άλλες δομές δεδομένων είναι ότι οι σχετικές αλγόριθμοι ταξινόμησης και αλγόριθμους αναζήτησης, όπως στην παραγγελία διάσχιση μπορεί να είναι πολύ αποτελεσματική.

Και αυτό είναι ουρά προτεραιότητας σας. Σε μια πιθανή εφαρμογή, αντικείμενα με τουλάχιστον προτεραιότητα θα πάρει το μεγαλύτερο αριθμό και τα στοιχεία με την υψηλότερη προτεραιότητα θα πάρει το χαμηλότερο αριθμό. Εάν αυτά τα στοιχεία εισάγονται στη BST και μπορείτε να το διαβάσετε inorder, τότε έχετε τη σειρά με την οποία πρέπει να γίνεται η ουρά.

Για να επεξεργαστείτε την ουρά, θα «σκάσει» από το πρώτο στοιχείο στο δέντρο και το υπόλοιπο θα πρέπει να παραγγελθεί αυτόματα από το BST.

Το μόνο πράγμα που πρέπει να φροντίσει σχετικά είναι η σωστή εισαγωγή των νέων στοιχείων στο δέντρο και τι θα συμβεί αν ο πρώτος έχει αφαιρεθεί.

Μεθόδους σας θα αντιστοιχίζονται με τις πράξεις δέντρο, addεισάγει ένα νέο στοιχείο στη σωστή θέση και να τροποποιήσετε το δέντρο, αν είναι απαραίτητο, sizeγια παράδειγμα, δίνει πίσω το μέγεθος του δέντρου, inorderθα διασχίσει το δέντρο.

Ελπίζουμε ότι έκανε λίγο πιο σαφής.

Απαντήθηκε 21/05/2011 στις 22:58
πηγή χρήστη

ψήφοι
0

προσθέστε ματιά αφαίρεση είναι τυποποιημένες μεθόδους για BST

για την αναζήτηση μπορείτε να cache το μέγεθος σε κάθε κόμβο που θα είναι ο σημερινός αριθμός των στοιχείων στο δευτερεύον δέντρο του οποίου ο κόμβος είναι η ρίζα του (ή με άλλα λόγια 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