Είναι O (logn) πάντα ένα δέντρο;

ψήφοι
6

Βλέπουμε πάντα λειτουργίες σε ένα (δυαδική αναζήτηση) δέντρο O (logn) χειρότερη περίπτωση χρόνος τρέχει λόγω του ύψους δέντρο logn. Αναρωτιέμαι αν μας λένε ότι ένας αλγόριθμος έχει τρέξιμο χρόνο σε συνάρτηση με logn, π.χ. m + nlogn, μπορούμε να συμπεράνουμε ότι πρέπει να εμπεριέχει (επαυξημένη) δέντρο;

EDIT: Ευχαριστώ για τα σχόλιά σας, τώρα συνειδητοποιούν χωρίζουν βασίλευε και δυαδικό δέντρο είναι τόσο όμοια οπτικά / εννοιολογικά. Ποτέ δεν είχε κάνει μια σύνδεση μεταξύ των δύο. Αλλά νομίζω ότι μια περίπτωση O (logn) δεν είναι ένα χάσμα βασίλευε algo η οποία περιλαμβάνει ένα δέντρο που δεν έχει καμία ιδιότητα ενός BST / AVL / κόκκινο-μαύρο δέντρο.

Αυτή είναι η ασύνδετη δομή δεδομένων σετ με Βρες επιχειρήσεις / Ένωσης, του οποίου τρέχει ο χρόνος είναι O (N + MlogN), με Ν είναι το # των στοιχείων και Μ ο αριθμός των εργασιών Εύρεση.

Παρακαλώ επιτρέψτε μου να ξέρω αν είμαι λείπει sth, αλλά δεν μπορώ να δω πώς διαίρει-βασίλευε μπαίνει στο παιχνίδι εδώ. Βλέπω μόνο σε αυτό (ασυνεχές σύνολο) περίπτωση που έχει ένα δέντρο χωρίς ιδιοκτησία BST και χρόνου λειτουργίας είναι συνάρτηση της logN. Το ερώτημά μου είναι σχετικά με το γιατί / γιατί δεν μπορώ να κάνω μια γενίκευση από αυτή την υπόθεση.

Δημοσιεύθηκε 22/02/2010 στις 05:25
πηγή χρήστη
Σε άλλες γλώσσες...                            


7 απαντήσεις

ψήφοι
7

Όχι, μπορείτε επίσης δυαδική αναζήτηση σε ταξινομημένο πίνακα (για παράδειγμα). Αλλά μην πάρτε τη λέξη μου για αυτό http://en.wikipedia.org/wiki/Binary_search_algorithm

Απαντήθηκε 22/02/2010 στις 05:26
πηγή χρήστη

ψήφοι
3

Ως ένα μετρητή παράδειγμα:

given array 'a' with length 'n'
y = 0
for x = 0 to log(length(a))
    y = y + 1
return y

Ο χρόνος λειτουργίας του είναι O (log (n)), αλλά όχι το δέντρο εδώ!

Απαντήθηκε 22/02/2010 στις 05:28
πηγή χρήστη

ψήφοι
0

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

Παραδείγματα O (logn):

  • Η εύρεση ενός στοιχείου σε μια ταξινομημένη σειρά με μια δυαδική αναζήτηση ή ένα ισορροπημένο δέντρο αναζήτησης.

  • Αναζητήστε μια τιμή σε ένα ταξινομημένο πίνακα εισόδου από διχοτόμησης.

Απαντήθηκε 22/02/2010 στις 05:40
πηγή χρήστη

ψήφοι
7

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

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

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

Απαντήθηκε 22/02/2010 στις 06:45
πηγή χρήστη

ψήφοι
2

Απάντηση είναι όχι. Δυαδική αναζήτηση ενός ταξινομημένο πίνακα είναι O(log(n)).

Απαντήθηκε 22/02/2010 στις 06:48
πηγή χρήστη

ψήφοι
0

Όπως O (log (n)) είναι μόνο ένα άνω όριο, επίσης, όλα O (1) αλγορίθμων αρέσει function (a, b) return a+b;ικανοποιούν τη συνθήκη.

Αλλά πρέπει να συμφωνήσουν όλα τα Theta (log (n)) αλγορίθμων φαίνονται κάπως σαν αλγόριθμους δέντρο ή τουλάχιστον μπορεί να αντληθεί σε ένα δέντρο.

Απαντήθηκε 22/02/2010 στις 07:26
πηγή χρήστη

ψήφοι
0

Σύντομη απάντηση:

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

for(int i = 1; i < n; i = i * 2)
  print "hello";

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

Περισσότερα για δέντρα:

Ακριβώς επειδή ένας αλγόριθμος περιλαμβάνει «δέντρα» δεν συνεπάγεται O(logn)ούτε. Θα πρέπει να γνωρίζετε τον τύπο δέντρο και το πώς η λειτουργία επηρεάζει το δέντρο.

Μερικά παραδείγματα:

  • Παράδειγμα 1)

Τοποθέτηση ή ψάχνουν τα ακόλουθα μη ισορροπημένη δέντρο θα είναι O(n).

εισάγετε περιγραφή της εικόνας εδώ

  • Παράδειγμα 2)

Τοποθέτηση ή αναζητήστε τα ακόλουθα ισορροπημένη δέντρα θα τόσο O(log(n)).

Ισορροπημένη Binary Tree:

εισάγετε περιγραφή της εικόνας εδώ

Ισορροπημένη Δέντρο της Βαθμός 3:

εισάγετε περιγραφή της εικόνας εδώ

Πρόσθετα σχόλια

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

Απαντήθηκε 27/04/2016 στις 00:55
πηγή χρήστη

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