Διαφορά μεταξύ LinkedList και Binary Search Tree

ψήφοι
28

Ποιες είναι οι κύριες διαφορές μεταξύ ενός Συνδεδεμένη Λίστα και BinarySearchTree; Είναι BST απλά ένας τρόπος για τη διατήρηση ενός LinkedList; εκπαιδευτής μου μίλησε για LinkedList και, στη συνέχεια, BST, αλλά did't σύγκρισή τους ή δεν είπε πότε να προτιμούν μία πάνω στην άλλη. Αυτό είναι πιθανώς μια χαζή ερώτηση, αλλά είμαι πραγματικά σύγχυση. Θα το εκτιμούσα αν κάποιος μπορεί να το διευκρινίσω αυτό με έναν απλό τρόπο.

Δημοσιεύθηκε 06/11/2008 στις 21:13
πηγή χρήστη
Σε άλλες γλώσσες...                            


13 απαντήσεις

ψήφοι
8

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

Αμέσως μπορείτε να μερικά συμβιβασμούς: Συνδέεται λίστες διατήρηση της τάξης εισαγωγή και εισαγωγής είναι λιγότερο ακριβά δυαδικά δέντρα αναζήτησης είναι γενικά πιο γρήγορα για να αναζητήσετε

Απαντήθηκε 06/11/2008 στις 21:19
πηγή χρήστη

ψήφοι
12

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

  • κάθε κόμβος (στοιχείο στο δέντρο) έχει μια ξεχωριστή αξία?
  • τόσο το αριστερό και το δεξί υποδένδρων πρέπει επίσης να είναι δυαδικά δέντρα αναζήτησης?
  • το αριστερό υποδένδρο του κόμβου περιέχει τιμές μόνο λιγότερο από την αξία του κόμβου?
  • το δικαίωμα υποδένδρο του κόμβου περιέχει τιμές μόνο μεγαλύτερη ή ίση με την τιμή του κόμβου.

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

Έτσι, μια δυαδική αναζήτηση δέντρο είναι μια αφηρημένη έννοια που μπορεί να εφαρμοστεί με μια συνδεδεμένη λίστα ή έναν πίνακα. Ενώ η συνδεδεμένη λίστα είναι μια θεμελιώδης δομή δεδομένων.

Απαντήθηκε 06/11/2008 στις 21:20
πηγή χρήστη

ψήφοι
5

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

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

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

Απαντήθηκε 06/11/2008 στις 21:20
πηγή χρήστη

ψήφοι
71

Συνδέεται Λίστα:

Item(1) -> Item(2) -> Item(3) -> Item(4) -> Item(5) -> Item(6) -> Item(7)

Δυαδικό δέντρο:

                 Node(1)
                /
            Node(2)
           /    \
          /      Node(3)
  RootNode(4)
          \      Node(5)
           \    /
            Node(6)
                \
                 Node(7)

Σε μια συνδεδεμένη λίστα, τα στοιχεία συνδέονται μεταξύ τους μέσω ενός ενιαίου επόμενο δείκτη. Σε ένα δυαδικό δέντρο, κάθε κόμβος μπορεί να έχει 0, 1 ή 2 subnodes, όπου (στην περίπτωση ενός δυαδικού δένδρου αναζήτησης) το πλήκτρο του αριστερού κόμβου είναι μικρότερο από το κλειδί του κόμβου και το κλειδί του δικαιώματος κόμβου είναι μεγαλύτερη από ό, τι ο κόμβος. Εφ 'όσον το δέντρο είναι ισορροπημένη, η SearchPath σε κάθε στοιχείο είναι πολύ μικρότερη από ότι σε μια συνδεδεμένη λίστα.

Searchpaths:

------ ------ ------
key    List   Tree
------ ------ ------
1      1      3
2      2      2
3      3      3
4      4      1
5      5      3
6      6      2
7      7      3
------ ------ ------
avg    4      2.43
------ ------ ------

Με μεγαλύτερες δομές η μέση διαδρομή αναζήτησης γίνεται σημαντική μικρότερο:

------ ------ ------
items  List   Tree
------ ------ ------
     1      1   1
     3      2   1.67
     7      4   2.43
    15      8   3.29
    31     16   4.16
    63     32   5.09
------ ------ ------
Απαντήθηκε 06/11/2008 στις 21:21
πηγή χρήστη

ψήφοι
1

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

Μια συνδεδεμένη λίστα είναι απλά μια δομή που περιέχει κόμβους και δείκτες / αναφορές σε άλλους κόμβους μέσα σε ένα κόμβο. Λαμβάνοντας υπόψη τον κόμβο κεφάλι του μια λίστα, μπορείτε να περιηγηθείτε σε οποιοδήποτε άλλο κόμβο σε μια συνδεδεμένη λίστα. Διπλά συνδεδεμένες λίστες έχουν δίποντα / αναφορές: η κανονική αναφορά στον επόμενο κόμβο, αλλά και μια αναφορά στο προηγούμενο κόμβο. Αν ο τελευταίος κόμβος σε μια διπλά-συνδεδεμένη λίστα αναφέρει το πρώτο κόμβο της λίστας ως το επόμενο κόμβο, και ο πρώτος κόμβος αναφοράς το τελευταίο κόμβο ως προηγούμενο κόμβο του, λέγεται ότι είναι ένα κυκλικό λίστα.

Ένα δυαδικό δένδρο αναζήτησης είναι ένα δέντρο που χωρίζει την είσοδο του σε δύο περίπου ίσα μισά βασίζεται σε ένα δυαδικό αλγόριθμο σύγκρισης αναζήτησης. Έτσι, χρειάζεται μόνο μια πολύ λίγες έρευνες για να βρουν ένα στοιχείο. Για παράδειγμα, αν είχατε ένα δέντρο με 1-10 και χρειάζεται να ψάξετε τρεις, πρώτα το στοιχείο στην κορυφή θα πρέπει να ελέγχονται, κατά πάσα πιθανότητα ένα 5 ή 6. Τρεις θα είναι μικρότερο από αυτό, έτσι ώστε μόνο το πρώτο εξάμηνο του δέντρο στη συνέχεια θα ελεγχθούν. Εάν η επόμενη τιμή είναι 3, το έχετε, διαφορετικά, η σύγκριση γίνεται, κλπ, μέχρις ότου είτε δεν έχει βρεθεί ή τα δεδομένα του επιστρέφεται. Έτσι το δέντρο είναι γρήγορη για αναζήτηση, αλλά όχι nessecarily γρήγορα για εισαγωγή ή διαγραφή. Αυτά είναι πολύ τραχιά περιγραφές.

Συνδέεται Λίστα από τη Βικιπαίδεια, και Binary Search Tree , και από wikipedia.

Απαντήθηκε 06/11/2008 στις 21:21
πηγή χρήστη

ψήφοι
3

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

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

Απαντήθηκε 06/11/2008 στις 21:21
πηγή χρήστη

ψήφοι
4

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

1 -> 2 -> 5 -> 3 -> 9 -> 12 -> |i. (Αυτό το τελευταίο είναι μια προσπάθεια ASCII-art σε null τερματισμού)

Μια Binary Search Tree είναι διαφορετική σε 2 τρόπους: το δυαδικό μέρος σημαίνει ότι κάθε κόμβος έχει 2 παιδιά, όχι ένα, και το μέρος αναζήτηση σημαίνει ότι αυτά τα παιδιά είναι τοποθετημένα να επιταχύνει τις αναζητήσεις - μόνο μικρότερα αντικείμενα προς τα αριστερά, και μόνο μεγαλύτερα δεξιά:

    5
   / \
  3   9
 / \   \
1   2   12

9 δεν έχει αριστερό παιδί, και 1, 2, και 12 είναι «φύλλα» - δεν έχουν υποκαταστήματα.

Βγάζει νόημα?

Για τους περισσότερους «αναζήτηση» είδη χρήσεων, ένα BST είναι καλύτερη. Αλλά μόνο για «τη διατήρηση μια λίστα με πράγματα που πρέπει να αντιμετωπίσουν αργότερα First-In-First-Out ή Τελευταία-In-First-Out» του είδους τα πράγματα, μια συνδεδεμένη λίστα θα μπορούσε να λειτουργήσει καλά.

Απαντήθηκε 06/11/2008 στις 21:22
πηγή χρήστη

ψήφοι
2

Συνδέεται Λίστα είναι ευθεία Γραμμική δεδομένων με γειτονικούς κόμβους που συνδέονται μεταξύ τους π.χ. Α-> Β-> C. Μπορείτε να το θεωρούν ως μια ευθεία φράχτη.

BST είναι μια ιεραρχική δομή ακριβώς όπως ένα δέντρο με τον κύριο κορμό συνδέεται με τα υποκαταστήματα και τους κλάδους με τη σειρά του συνδέεται με άλλους κλάδους και ούτω καθεξής. Η λέξη «δυαδικό» εδώ σημαίνει ότι κάθε κλάδος συνδέεται με ανώτατο όριο τα δύο κλάδους.

Μπορείτε να χρησιμοποιήσετε συνδεδεμένη λίστα να εκπροσωπεί κατ 'ευθείαν δεδομένα μόνο με κάθε στοιχείο που συνδέεται με ανώτατο όριο ενός αντικειμένου? ενώ μπορείτε να χρησιμοποιήσετε BST για τη σύνδεση ενός στοιχείου σε δύο σημεία. Μπορείτε να χρησιμοποιήσετε BST να αποτελούν στοιχεία, όπως το οικογενειακό δέντρο, αλλά αυτό θα γίνει n-αδική δέντρο αναζήτησης, όπως μπορεί να υπάρχουν περισσότερα από δύο παιδιά σε κάθε άτομο.

Απαντήθηκε 06/11/2008 στις 21:22
πηγή χρήστη

ψήφοι
1

Είναι εντελώς διαφορετικές δομές δεδομένων.

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

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

Απαντήθηκε 06/11/2008 στις 21:22
πηγή χρήστη

ψήφοι
3

Το θέμα με μια συνδεδεμένη λίστα είναι η αναζήτηση μέσα σε αυτό (είτε για ανάκτηση ή τοποθετήστε).

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

Ένα δυαδικό δέντρο επιτρέπει την πιο γρήγορη αναζήτηση και την εισαγωγή με το να είναι εγγενώς ταξινομημένο και πλωτό.

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

Απαντήθηκε 06/11/2008 στις 21:23
πηγή χρήστη

ψήφοι
6

Μια συνδεδεμένη λίστα είναι ο αύξων αριθμός «κόμβους» συνδέονται μεταξύ τους, δηλαδή:

public class LinkedListNode
{
     Object Data;
     LinkedListNode NextNode;
}

Μια Binary Search Tree χρησιμοποιεί μια παρόμοια δομή κόμβου, αλλά αντί της σύνδεσης με το επόμενο κόμβο, συνδέει δύο κόμβους του παιδιού:

public class BSTNode
{
    Object Data
    BSTNode LeftNode;
    BSTNode RightNode;
} 

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

Είναι σημαντικό να σημειωθεί ότι αν τοποθετήσετε ταξινομημένα δεδομένα σε ένα BST, θα καταλήξετε με μια συνδεδεμένη λίστα, και χάνετε το πλεονέκτημα της χρήσης ενός δέντρου.

Εξαιτίας αυτού, μια LinkedList είναι ένα Ξ (Ν) δομή δεδομένων διάσχισης, ενώ ένα BST είναι ένα Ο (Ν) δομή δεδομένων διάσχισης στη χειρότερη περίπτωση, και ένα O (log N) στην καλύτερη περίπτωση.

Απαντήθηκε 06/11/2008 στις 21:23
πηγή χρήστη

ψήφοι
16

Μια Binary Search Tree είναι ένα δυαδικό δένδρο στο οποίο κάθε εσωτερικός κόμβος x αποθηκεύει ένα στοιχείο, έτσι ώστε το στοιχείο αποθηκεύεται στο αριστερό υποδέντρο του x είναι μικρότερη ή ίση με x και τα στοιχεία που αποθηκεύονται στο δεξί υποδέντρο του x είναι μεγαλύτερο ή ίσο με x .

alt κείμενο

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

Συνδέεται Λίστα

Απαντήθηκε 06/11/2008 στις 21:26
πηγή χρήστη

ψήφοι
3

Έχουν ομοιότητες, αλλά η κύρια διαφορά είναι ότι ένα δυαδικό Αναζήτηση δέντρο έχει σχεδιαστεί για να υποστηρίξει την αποτελεσματική αναζήτηση για ένα στοιχείο, ή «κλειδί».

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

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

Με αυτή την απλή προσέγγιση, εάν τα στοιχεία προστίθενται στην σειρά, μπορείτε να καταλήξετε με μια συνδεδεμένη λίστα (με την ίδια απόδοση). Υπάρχουν διαφορετικοί αλγόριθμοι για τη διατήρηση κάποιο μέτρο της ισορροπίας στο δέντρο, με αναδιάταξη των κόμβων. Για παράδειγμα, AVL δέντρα κάνουν την περισσότερη δουλειά για να κρατήσει το δέντρο ισορροπημένη όσο το δυνατόν, δίνοντας τις καλύτερες στιγμές της αναζήτησης. Red-μαύρα δέντρα δεν τηρούν το δέντρο ισορροπημένη, με αποτέλεσμα ελαφρώς πιο αργή αναζητήσεις, αλλά το κάνει λιγότερη δουλειά κατά μέσο όρο, καθώς τα κλειδιά τοποθετηθεί ή να αφαιρεθεί.

Απαντήθηκε 06/11/2008 στις 22:46
πηγή χρήστη

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