Γιατί δυαδικά δένδρα αναζήτησης;

ψήφοι
6

Διάβαζα δυαδικό δένδρο αναζήτησης και σκεφτόμουν ότι γιατί χρειαζόμαστε BST σε όλα; Όλα τα πράγματα όσο ξέρω μπορεί επίσης να επιτευχθεί με τη χρήση απλών ταξινομημένο συστοιχίες. Για παράδειγμα - Για να οικοδομήσουμε μια BST που έχει n στοιχεία, που απαιτεί n*O(log n)χρόνο, δηλαδή O(nlog n)και ο χρόνος αναζήτησης είναι O(log n). Αλλά αυτό το πράγμα μπορεί να επιτευχθεί με τη χρήση πίνακα. Μπορούμε να έχουμε ένα ταξινομημένο πίνακα (απαιτεί O(nlog n)χρόνο), και ο χρόνος αναζήτησης από το γεγονός ότι είναι O(log n)δηλαδή δυαδική algo αναζήτησης. Τότε γιατί χρειαζόμαστε μια άλλη δομή δεδομένων σε όλα; Υπάρχουν οποιαδήποτε άλλη χρήση / εφαρμογή της BST που τα καθιστούν τόσο ξεχωριστό εκεί;

--Ravi

Δημοσιεύθηκε 14/10/2010 στις 16:28
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
4

Τι θα λέγατε για ταξινόμηση χρόνο εισαγωγής;

Απαντήθηκε 14/10/2010 στις 16:30
πηγή χρήστη

ψήφοι
1

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

Και αν δεν προ-υπολογιστεί το δέντρο / sortedlist την τυχαία χρονική στιγμή της εισαγωγής O (n) σε μια λίστα μπορεί να είναι απαγορευτικά αργή. χρονική στιγμή της εισαγωγής σε ένα δέντρο από την άλλη πλευρά είναι μόνο O (log (n)).

Απαντήθηκε 14/10/2010 στις 16:36
πηγή χρήστη

ψήφοι
9

Οι πίνακες είναι μεγάλη, αν μιλάμε για write once, διαβάστε πολλές φορές το είδος των αλληλεπιδράσεων. Είναι όταν πιάσουμε την εισαγωγή, ανταλλαγή και τη διαγραφή στο οποίο BST αρχίσει πραγματικά να λάμψει σε σχέση με μια σειρά. Δεδομένου ότι είναι κόμβο βασίζονται, όχι βασίζεται σε μία παρακείμενη κομμάτι της μνήμης, το κόστος της μετακίνησης ενός στοιχείου είτε στη συλλογή ή έξω της συλλογής είναι γρήγορη ενώ εξακολουθούν να διατηρούν την ταξινομημένη φύση της συλλογής.

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

Απαντήθηκε 14/10/2010 στις 16:53
πηγή χρήστη

ψήφοι
7

Φανταστείτε ότι έχετε έναν πίνακα με ένα εκατομμύριο στοιχεία.

Θέλετε να τοποθετήσετε ένα στοιχείο στη θέση 5.

Έτσι, εισάγετε στο τέλος του πίνακα και στη συνέχεια το είδος.

Ας πούμε ότι η σειρά είναι πλήρης? αυτό είναι O (nlog n), η οποία είναι 1.000.000 * 6 = 6.000.000 λειτουργίες.

Φανταστείτε ότι έχετε ένα ισορροπημένο δέντρο.

Αυτό είναι O (log n), συν ένα bit για εξισορρόπηση = 6 + λίγο, το ονομάσουμε 10 εργασίες.

Έτσι, έχετε μόλις περάσει 6.000.000 ops διαλογή σειρά σας. Στη συνέχεια, θέλετε να βρείτε αυτό το στοιχείο. Τι κάνεις? δυαδική αναζήτηση - O (log n) - το οποίο είναι ακριβώς το ίδιο με αυτό που πάμε να κάνουμε όταν κάνετε αναζήτηση στο δέντρο!

Τώρα φανταστείτε ότι θέλετε να διαθέσουν -another- στοιχείο.

σειρά σας είναι γεμάτο! τι κάνεις? εκ νέου κατανείμει τη συστοιχία με η επιπλέον στοιχεία και memcpy την παρτίδα; θέλετε πραγματικά να memcpy 4mbytes;

Σε ένα δέντρο, μπορείτε απλά να προσθέσω ένα άλλο στοιχείο ...

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

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