BinarySearchTree căutarea eficienței vitezei

voturi
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();
}
}

Când am rulat acest program se presupune a fi a face 4 arbori de dimensiuni diferite: 10000, 50000, 100000, 250000 știu că eficiența de viteză pe BSTs căutarea se presupune a fi O (n log), dar eu sunt obtinerea de aceste numere:

atunci când faci 10.000 de căutări am obține aceste numere: (prima coloană este dimensiunea de copac, al doilea este momentul în care a luat pentru a face căutarea)

10000, 9.000000
50000, 3.000000
100000, 4.000000

atunci când faci 100.000 de căutări:

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

Orice sfaturi sunt apreciate.

Întrebat 15/05/2011 la 16:24
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
1

Cel mai probabil te vedea efectul de „ratări“. Din moment ce sunteți doar în căutarea de numere aleatoare, numere care nu sunt în copac va lua mult mai mult decât numărul de care sunt.

De asemenea, eficiența unui arbore binar de căutare este O (h), în cazul în care h este înălțimea copacului. Copaci rosu-negru și copaci AVL garantează că acestea vor fi construite cu o înălțime de O (log n), dar copaci construite în mod aleatoriu ar putea ajunge foarte ușor cu o înălțime de aproape de O (n).

Publicat 15/05/2011 la 16:34
sursa de către utilizator

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