Προσωπικά πιστεύω ότι ο καλύτερος τρόπος για να γίνει αυτό θα ήταν να πάμε για ένα τυχαίο δυαδικό δέντρο αναζήτησης όπως ένα treap . Αυτό δεν είναι απολύτως εγγύηση ότι το δέντρο θα είναι ισορροπημένη, αλλά με μεγάλη πιθανότητα το δέντρο θα έχει μια καλή παράγοντα ισορροπίας. Μια treap λειτουργεί με αύξηση κάθε στοιχείο του δέντρου με ομοιόμορφα τυχαίο αριθμό, τότε εξασφαλίζει ότι το δέντρο είναι ένα δυαδικό δένδρο αναζήτησης σε σχέση με τα πλήκτρα και ένα σωρό σε σχέση με τις ομοιόμορφες τυχαίες τιμές. Εισαγωγή σε treap είναι εξαιρετικά εύκολη:
- Διαλέξτε έναν τυχαίο αριθμό για να αναθέσει στον πρόσφατα πρόσθετο στοιχείο.
- Τοποθετήστε το στοιχείο μέσα στο BST χρησιμοποιώντας πρότυπες εισαγωγής BST.
- Ενώ το κλειδί της πρόσφατα εισαχθεί στοιχείου είναι μεγαλύτερη από ό, τι το κλειδί της μητρικής της, να εκτελέσει μια περιστροφή δέντρο για να φέρει το νέο στοιχείο πάνω από τη μητρική της.
Αυτό το τελευταίο βήμα είναι η μόνη πραγματικά δύσκολη, αλλά αν είχε λίγο χρόνο για να το λειτουργήσει σε έναν πίνακα Είμαι απόλυτα βέβαιος ότι θα μπορούσατε να εφαρμόσει αυτό το on-the-fly σε μια συνέντευξη.
Μια άλλη επιλογή που θα μπορούσε να λειτουργήσει θα ήταν να χρησιμοποιήσετε ένα δέντρο άτεχνος . Είναι ένας άλλος τύπος γρήγορο BST που μπορούν να εφαρμοστούν με την προϋπόθεση να έχουν ένα πρότυπο λειτουργίας ένθετο BST και την ικανότητα να κάνει περιστροφές δέντρο. Είναι σημαντικό, τα δέντρα άτεχνος είναι εξαιρετικά γρήγορος στην πράξη, και είναι γνωστό ότι είναι (μέσα σε ένα σταθερό παράγοντα) τουλάχιστον τόσο καλό όσο οποιοδήποτε άλλο στατικό δυαδικό δένδρο αναζήτησης.
Ανάλογα με το τι σημαίνει «δέντρο αναζήτησης,» θα μπορούσε επίσης να εξετάσει την αποθήκευση των ακεραίων σε κάποια δομή βελτιστοποιηθεί για αναζήτηση των ακεραίων. Για παράδειγμα, θα μπορούσατε να χρησιμοποιήσετε ένα trie bitwise για την αποθήκευση των ακεραίων, το οποίο υποστηρίζει την αναζήτηση σε χρόνο ανάλογο με τον αριθμό των bits σε μια λέξη μηχανής. Αυτό μπορεί να υλοποιηθεί πολύ όμορφα με μια αναδρομική συνάρτηση να κοιτάξουν πέρα από τα κομμάτια, και δεν απαιτεί κανενός είδους περιστροφές. Αν χρειάζεται να ανατινάξει από μια εφαρμογή σε δεκαπέντε λεπτά, και αν ο ερευνητής σας δίνει τη δυνατότητα να αποκλίνουν από τις συνήθεις δυαδικά δέντρα αναζήτησης, τότε αυτό θα μπορούσε να είναι μια πολύ καλή λύση.
Η ελπίδα αυτό βοηθά!