BinarySearchTree Suchgeschwindigkeit Effizienz

stimmen
0
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;


public class BSTSearchTimer {

int [] n = {10000, 50000, 100000, 250000};
Random rand = new Random();

public static void main(String[] args) throws IOException{

    BSTSearchTimer timer = new BSTSearchTimer();
    timer.runBSTSearchTimer();

}

public void runBSTSearchTimer() throws IOException{
    PrintWriter out = new PrintWriter( new FileWriter(tree2.csv));
    int reps = 10000; // the number of searches that we will do on the tree


    for (int i = 0; i < n.length; i++){
        BinarySearchTree<Long> longBST = new BinarySearchTree<Long>();
        boolean success = true;

        int numOfElements = n[i];

        while (longBST.size() < numOfElements){

                success = longBST.add(rand.nextLong());
                while (!success){ // should keep attempting to add values until success is true
                    success = longBST.add(rand.nextLong());
            }

        }

        long start = System.currentTimeMillis(); // start the timer for searching

        for ( int j = 0; j < reps; j++){ // search rep times
            longBST.find(rand.nextLong());
        }
        long end = System.currentTimeMillis(); // end timer for searching tree

        double time = end-start;

        System.out.printf(%d, %f\n, longBST.size(), time);
        out.printf(%d, %f\n, n[i], time);

    }
    out.close();
}
}

Als ich dieses Programm ausführen es soll 4 verschieden große Bäume zu machen: 10000, 50000, 100000, 250000 Ich weiß, dass auf der Suche BSTs die Geschwindigkeit Effizienz zu O (Log n) soll aber ich diese Zahlen bekommen:

wenn 10.000 Suchanfrage zu tun bekomme ich diese Zahlen: (erste Spalte die Größe des Baumes ist, der zweite ist die Zeit, es ist nahm die Suche zu tun)

10000, 9.000000
50000, 3.000000
100000, 4.000000

wenn dabei 100.000 gesucht:

10000, 41.000000
50000, 31.000000
100000, 40.000000
250000, 74.000000

Alle Tipps sind erwünscht.

Veröffentlicht am 15/05/2011 um 16:24
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Wahrscheinlich sind Sie zu sehen, die Wirkung von „Misses“. Da Sie die Suche nur für Zufallszahlen, Zahlen, die nicht in dem Baum sind, werden viel länger als Zahl nehmen, die sind.

Auch ist die Effizienz eines binären Suchbaumes O (h), wobei h die Höhe des Baumes ist. Rot-Schwarz Bäume und AVL - Bäume garantieren , dass sie mit einer Höhe von O (log n), aber zufällig konstruiert Bäume leicht mit einer Höhe gebaut werden der Nähe von O (n) könnte am Ende.

Beantwortet am 15/05/2011 um 16:34
quelle vom benutzer

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