Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> Προγραμματισμός Υπολογιστών Γλώσσες

Πώς να φυλάσσεται ένα δυαδικό δέντρο αναζήτησης σε ένα αρχείο

Ένα δυαδικό δένδρο αναζήτησης είναι μια δομή δεδομένων , όπου τα αρχεία δεδομένων , που ονομάζεται «κόμβους », έχουν δείκτες σε άλλους κόμβους , που ονομάζεται " τα παιδιά . " Αυτό δίνει την κόμβους , όταν γραφικά έξω, ένα σχήμα παρόμοιο με ένα οικογενειακό δέντρο . Κόμβοι λάβουν τη θέση τους στο δέντρο με βάση το αν θα αξιολογήσει ως μεγαλύτερο ή μικρότερο από άλλους κόμβους . Αφήσει τα παιδιά είναι πάντα μικρότερη από τις μητρικές τους ? Δικαίωμα των παιδιών πάντα more.Binary δέντρα αναζήτησης είναι σημαντικές στην επιστήμη των υπολογιστών , επειδή μπορεί να είναι τόσο ταξινόμηση και αναζήτηση , κατά μέσο όρο , σε O ( n log n) χρόνο . Τα πράγματα που θα χρειαστείτε
Compiler
Υφιστάμενες δυαδικό δέντρο αναζήτησης

Παρουσίαση Περισσότερες οδηγίες
Η 1

Δημιουργήστε μια λειτουργία κατάστημα που λαμβάνει ο κόμβος ρίζας . Κάθε φορά που θα ασχοληθεί με τα δέντρα στην επιστήμη των υπολογιστών , ο πιο αποτελεσματικός αλγόριθμος σχεδόν πάντα θα είναι αναδρομική και την αποθήκευση του δέντρου σε ένα αρχείο δεν θα αποτελέσει εξαίρεση . Εδώ είναι ένας σκελετός δείγμα της λειτουργίας αναδρομικών κατάστημα ( σε Java ) . Δημόσια κατάστημα void ( κόμβος n ) ρίχνει IOException { ... } 2

Γράψτε στοιχεία σχετικά με ριζικό κόμβο στο αρχείο . Αυτό θα χρησιμοποιήσει « διάσχιση προ-παραγγελία " ( Root , Αριστερά παιδιών , το δικαίωμα του παιδιού ) να περάσουν από όλους τους κόμβους στο δέντρο , επειδή αυτή η μέθοδος της διάσχισης θα καταστήσει ευκολότερο να ανακατασκευάσει το δέντρο από τη σειρά των κόμβων στο αρχείο . Η αναδρομική συνάρτηση μοιάζει τώρα με αυτό : public void κατάστημα ( Κόμβος n ) ρίχνει IOException { write ( savefile , n ) ? } Κατάστημα θα πρέπει να ζητήσει η ίδια με την Αριστερά Παιδί: δημόσια αποθήκη void ( κόμβος n ) ρίχνει IOException { write ( savefile , n ) ? κατάστημα ( n.left ) ? } Κατάστημα θα πρέπει να ζητήσει η ίδια με τη Δεξιά Παιδί: δημόσια αποθήκη void ( κόμβος n ) ρίχνει IOException { write ( savefile , n ) ? κατάστημα ( n.left ) ? κατάστημα ( n.right ) ? }
εικόνων 3

διπλό βεβαιωθείτε ότι η λειτουργία περνάει τον επαναληπτικό πίνακα ελέγχου . Για να αποφύγετε σφάλματα υπερχείλισης στοίβας , να ελέγχετε πάντα ότι μια αναδρομική συνάρτηση πληροί τις ακόλουθες προϋποθέσεις : Μήπως η λειτουργία έχει μια κατάσταση εξόδου ; Ναι , εφ 'όσον το δέντρο δεν είναι άπειρο βάθος , τελικά θα φτάσει σε ένα κόμβο που δεν έχει ούτε έναν αριστερό ή το δεξί παιδί και θα exit.Does η κάθε επανάληψη της λειτουργίας προσεγγίσουν την κατάσταση εξόδου ; Ναι , νοουμένου ότι το δέντρο δεν είναι κυκλική και κανένας κόμβος έχει ένα από τα δικά τους προγόνους του ως συνάρτηση child.The περνά τη λίστα ελέγχου .
Η 4

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

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα