Συγκεκριμένα παραδείγματα χρησιμοποιώντας δυαδικά δένδρα αναζήτησης;

ψήφοι
14

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

Θα μπορούσε κάποιος παρακαλώ να παρέχουν παραδείγματα πραγματικών προβλημάτων επιλύσιμο με δυαδικά δένδρα αναζήτησης;

Δημοσιεύθηκε 16/02/2011 στις 00:44
πηγή χρήστη
Σε άλλες γλώσσες...                            


5 απαντήσεις

ψήφοι
1

Ένα παράδειγμα όπου απαιτείται ένα δυαδικό δέντρο είναι δυαδικό χώρο χωρίσματα σε γραφικά υπολογιστών

http://en.wikipedia.org/wiki/Binary_space_partitioning

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

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

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

Απαντήθηκε 16/02/2011 στις 00:53
πηγή χρήστη

ψήφοι
0

Ένα από τα πιο παραβλεφθούν είναι ότι πολλά συστήματα αρχείων χρησιμοποιούν δυαδικά δέντρα για να διαχειριστείτε λίστες καταλόγων. Σπάνια χρησιμοποιούν ένα απλό δυαδικό δέντρο, αλλά κάποια παραλλαγή όπως ένα B-tree. Αυτό οφείλεται στο γεγονός ότι το ζήτημα της στο δίσκο αποθήκευσης του δέντρου είναι πολύ σημαντική για τις λεπτομέρειες της εφαρμογής. Ο λόγος που χρησιμοποιούν αυτό το είδος της δομής είναι για την αποτελεσματικότητα και την ταχύτητα. Αυτό τους επιτρέπει να κάνουν πράγματα όπως χιλιάδες στήριξη των αρχείων σε έναν κατάλογο. Συγκρίσεις για τη δημιουργία αρχείων και ώρες διαγραφή τονίσει αποδόσεις για αυτή την πτυχή του συστήματος αρχείων.

Τα δυαδικά δέντρα χρησιμοποιούνται επίσης σε πολλά παιχνίδια που καθιστούν 3D αντικείμενα. Και πάλι, ο λόγος είναι η ταχύτητα. Στην πραγματικότητα, η ταχύτητα είναι τόσο σημαντικό το γεγονός ότι κάποιες μηχανές παιχνιδιών, όπως η μηχανή του Quake έχει στην πραγματικότητα το δυαδικό δέντρο προ-δημιουργείται και προ-βελτιστοποιημένες ως μέρος της διαδικασίας χάρτη κατασκευής.

Απαντήθηκε 16/02/2011 στις 00:56
πηγή χρήστη

ψήφοι
0

Ένα πράγμα που πρέπει να σημειωθεί είναι ότι η δυαδική αναζήτηση Tree είναι αποτελεσματικές χώρο. Για παράδειγμα, έχετε 10 ακέραιοι να αποθηκεύουν και να έχετε μια συνάρτηση κατακερματισμού που χαρτογραφεί 0-99, τότε u ανάγκη μια σειρά από 100 ακεραίων. Εάν χρησιμοποιηθεί Binary Search Tree, τότε θα διαθέσει μόνο όσο μνήμης, όπως απαιτείται από 10 στοιχεία

Απαντήθηκε 16/02/2011 στις 00:57
πηγή χρήστη

ψήφοι
29

Υπάρχουν μερικά θεωρητικά πλεονεκτήματα δυαδικά δένδρα αναζήτησης πάνω πίνακες κατακερματισμού:

  1. Θα αποθηκεύουν τα στοιχεία τους σε ταξινομημένη σειρά . Αυτό σημαίνει ότι αν θέλετε να αποθηκεύσετε το δοχείο με έναν τρόπο όπου μπορείτε εύκολα να επισκεφθείτε τις τιμές σε ταξινομημένη σειρά, ένα BST είναι ίσως μια καλύτερη επιλογή από ένα πίνακα κατακερματισμού. Για παράδειγμα, εάν θέλετε να αποθηκεύσετε μια συλλογή των φοιτητών και στη συνέχεια να εκτυπώσετε όλους τους μαθητές με αλφαβητική σειρά, ένα BST είναι αισθητά καλύτερη επιλογή από ένα πίνακα κατακερματισμού.

  2. Είναι αποτελεσματικά υποστηρίξει επερωτήσεις εύρους. Επειδή οι BSTs αποθηκεύονται σε ταξινομημένη σειρά, είναι εύκολο να απαντήσει στις ερωτήσεις της μορφής «τι τιμές στο διάστημα [x, y];» σε ένα δυαδικό δέντρο αναζήτησης. Για να το κάνετε αυτό, μπορείτε να κάνετε μια αναζήτηση στο δέντρο για το μικρότερο στοιχείο μεγαλύτερο από το x και το μεγαλύτερο στοιχείο μικρότερο από y, τότε επαναλάβει πάνω από τα στοιχεία του δέντρου μεταξύ τους. Και οι δύο από αυτά τα ερωτήματα τρέχει σε O (lg n) χρόνο σε ένα ισορροπημένο δέντρο, οπότε το συνολικό χρόνο εκτέλεσης για αυτήν τη λειτουργία είναι Ο (lg n + k), όπου k είναι ο αριθμός των στοιχείων που ταιριάζουν με το ερώτημα.

  3. Είναι αποτελεσματική υποστήριξη ερωτήματα πλησιέστερου γείτονα. Οι hash πίνακες που έχουν σχεδιαστεί ειδικά έτσι ώστε ακόμη και ελαφρώς διαφορετικά προϊόντα εξωφρενικά διαφορετικούς κωδικούς hash. Αυτό δίνει τις τιμές hash η διασπορά που χρειάζονται για να αποφευχθεί η ομαδοποίηση πάρα πολλά στοιχεία σε ένα σημείο. Ωστόσο, αυτό σημαίνει επίσης ότι θα πρέπει να κάνει μια γραμμική σάρωση πάνω από τον πίνακα κατακερματισμού για να βρουν στοιχεία που θα μπορούσαν να «κλείσει» σε ό, τι ψάχνετε. Με ένα BST, μπορείτε να βρείτε αποτελεσματικά τον προκάτοχό του και διάδοχος του κάθε αξίας που θέλετε, ακόμα και αν δεν είναι στο δέντρο.

  4. Μπορούν να έχουν καλύτερες εγγυήσεις στη χειρότερη περίπτωση. Οι περισσότεροι πίνακα hash υλοποιήσεις έχουν κάποιο είδος εκφυλισμένων περίπτωση στην οποία μία λειτουργία μπορεί να υποβαθμίσει σε O (n) στην χειρότερη περίπτωση. Μια γραμμική ανίχνευση πίνακα κατακερματισμού ή μια συνδεδεμένη πίνακα κατακερματισμού μπορεί, με μια κακή σύνολο στοιχείων, απαιτούν O (n) χρόνο ανά συμβούλευσης ή απαιτούν O (n) χρόνο σε ένα αναμάσημα. Εισαγωγή σε ορισμένους τύπους ισορροπημένη BSTs, όπως το κόκκινο / μαύρο δέντρα, AVL δέντρα ή δέντρα ΑΑ, είναι πάντα χειρότερη περίπτωση O (lg n).

Εάν είστε πρόθυμοι να γενικεύσουμε BSTs σε πιο περίτεχνες δομές δέντρο, τότε υπάρχουν πολλές εφαρμογές στις οποίες ένα δέντρο μπορεί να χρησιμοποιηθεί για να λύσει τα προβλήματα πολύ πιο αποτελεσματικά από ό, τι σε ένα πίνακα κατακερματισμού. Εδώ είναι μερικά παραδείγματα:

  1. kd-δένδρα σας επιτρέψει να αποθηκεύσετε πολυδιάστατα δεδομένα, ενώ υποστηρίζει ερωτήματα γρήγορη σειρά σε πολυδιάστατο χώρο, καθώς και την αποτελεσματική του πλησιέστερου γείτονα αναζητήσεις. Μπορείτε να τα χρησιμοποιήσετε για την ταξινόμηση (αλγόριθμοι τεμπέλης μάθησης) ή υπολογιστικής γεωμετρίας.

  2. Link / κομμένα δέντρα μπορεί να χρησιμοποιηθεί για να λύσει τα προβλήματα μέγιστης ροής πολύ πιο αποτελεσματικά από ό, τι οι περισσότεροι συμβατικοί αλγόριθμοι θα επιτρέψει. Καλή ώθησης / επανετικετοποιήσετε αλγόριθμοι χρησιμοποιούν αυτό για να επιταχυνθεί η υλοποίησή τους.

  3. Disjoint-ρυθμίστε δάση μπορεί να χρησιμοποιηθεί για να διατηρήσει χωρίσματα των στοιχείων ως ασυμπτωτικά το δυνατόν πιο αποτελεσματικά (αποσβένεται α (n) ανά ενημέρωση, όπου α (n) είναι η αντίστροφη συνάρτηση Ackermann). Είναι που χρησιμοποιούνται σε πολλές γρήγορες ελάχιστη-που εκτείνονται σε αλγόριθμους δένδρου, καθώς και ορισμένες αλγόριθμοι μέγιστη αντιστοίχιση.

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

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

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

  7. Β-δέντρα χρησιμοποιούνται από πολλά συστήματα βάσεων δεδομένων για να εξετάσει αποτελεσματικά μέχρι στοιχείων όπου η πρόσβαση στο δίσκο είναι ένας περιοριστικός παράγοντας.

  8. Δυαδικά δέντρα χώρο διαχωρισμού είναι μια γενίκευση του kd-δένδρα που μπορεί να χρησιμοποιηθεί για να καταστήσει γρήγορα γραφικά υπολογιστών (είχαν χρησιμοποιηθεί για τη βελτιστοποίηση της απόδοσης στο αρχικό παιχνίδι Doom) και να κάνει σύγκρουσης ανίχνευσης.

  9. BK-δέντρα σας επιτρέπουν να προσδιορίσετε γρήγορα όλες τις λέξεις που βρίσκονται μέσα σε μια ορισμένη απόσταση επεξεργασία κάποιας άλλης λέξης, και γενικότερα να βρείτε όλα τα σημεία σε ένα μετρικό χώρο μέσα σε μια ορισμένη απόσταση από κάποιο άλλο σημείο.

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

  11. van Emde Boas δέντρα άλλη εναλλακτική για να πίνακας κατακερματισμού για κλειδιά ακέραιος που υποστηρίζουν αναζήτηση, εισαγωγή, διαγραφή, διάδοχος, και του προκατόχου σε O (lg lg n) χρόνο ανά στοιχείο. Μερικά συστήματα βάσεων δεδομένων χρησιμοποιούν VEB δέντρα για τη βελτιστοποίηση της απόδοσης.

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

Απαντήθηκε 16/02/2011 στις 01:05
πηγή χρήστη

ψήφοι
0

Αυτό θα πρέπει κατά πάσα πιθανότητα να είναι κάποιο σχόλιο, αλλά αυτο-εξισορρόπησης BST (s) (log (n)) χρησιμοποιούνται ευρέως όχι BSTs. Απλό BSTs έχουν χειρότερης περίπτωσης O (n) χρόνο εισαγωγής / αφαίρεσης.

Απαντήθηκε 16/02/2011 στις 03:14
πηγή χρήστη

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