ισορροπημένη δυαδικό δένδρο αναζήτησης χρησιμοποιώντας sortedset

ψήφοι
0

Παρακαλώ βοηθήστε έχω προσπαθήσει να δημιουργήσει ένα τυχαίο δυαδικό δέντρο αναζήτησης μεγέθους 1024 και τα στοιχεία που πρέπει να είναι τυχαία sortedset ... είμαι σε θέση να γράψω ένα κώδικα για να δημιουργήσετε ένα δυαδικό δέντρο αναζήτησης με το χέρι, με την προσθήκη στοιχείων χέρι, αλλά εγώ m unablele yo γράψετε έναν κωδικό που θα δημιουργήσει ένα τυχαίο ισορροπημένη δυαδικό δέντρο του μεγέθους 1024 και στη συνέχεια χρησιμοποιήστε προσπαθήστε να βρείτε ένα κλειδί σε αυτό το δέντρο ... παρακαλώ παρακαλώ και ευχαριστώ u μπροστά ....

Επεξεργασία προσθέσει κώδικα από σχόλια

ya είναι το σπίτι ... και αυτό είναι που πήρα το μέτρο Κωδικός:

using System; 
namespace bst { 
    public class Node { 
        public int value; 
        public Node Right = null; 
        public Node Left = null; 

        public Node(int value) 
        { 
            this.value = value; 
        } 
    } 

    public class BST { 
        public Node Root = null; 
        public BST() { }

        public void Add(int new_value) 
        { 
            if(Search(new_value)) 
            {
                Console.WriteLine(value ( + new_value + ) already);
            }
            else
            {
                AddNode(this.Root,new_value);
            }
        }
    }
}
Δημοσιεύθηκε 21/01/2011 στις 00:53
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
2

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

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

Ο διάμεσος θα είναι ο αριθμός, όπου ένα ίσο ποσό των αριθμών είναι μικρότερη από και μεγαλύτερη από τον αριθμό. 1,2,3,3,4,18,29,105,123 Στην περίπτωση αυτή, η διάμεση τιμή είναι 4, ακόμη και αν η μέση τιμή (ή η μέση) είναι πολύ υψηλότερη.

Εγώ δεν περιλαμβάνει κώδικα που καθορίζει τη μέση.

BuildTreeItem(TreeItem Item, Array Set)  
{
  Array Smalls;
  Array Larges;
  Median = DetermineMedian(Set);
  Item.Value = Median;
  if(Set.Count() == 1)
    return;  
  for (int i = 0; int i < Set.Count(); i++)
  {
    if(Set[i] < Median)
    {
      Smalls.new(Set[i]);
    }
    else
    {
      Larges.new(Set[i]);
    }
  }
  Item.Lower = new TreeItem;
  Item.Upper = new TreeItem;
  BuildTreeItem(TreeItem.Lower, Smalls);
  BuildTreeItem(TreeItem.Upper, Larges);
}
Απαντήθηκε 21/01/2011 στις 01:13
πηγή χρήστη

ψήφοι
0

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

Η άλλη επιλογή είναι να δούμε πραγματικά σε αλγορίθμους που οικοδομούν ισορροπημένη δέντρα (όπως http://en.wikipedia.org/wiki/Red-black_tree ) για να δείτε αν ταιριάζει στις απαιτήσεις σας.

EDIT: αφαίρεση εσφαλμένη δήλωση σχετικά με την ταχύτητα του αλγορίθμου Xaade - είναι στην πραγματικότητα τόσο γρήγορα όσο γρήγορα είδος (n log n - να ελέγχει κάθε στοιχείο σε κάθε επίπεδο της αναδρομής με log n επίπεδα αναδρομή), δεν είναι σίγουρος γι 'αυτό εκτιμάται ότι πιο αργή.

Απαντήθηκε 21/01/2011 στις 02:42
πηγή χρήστη

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