BinarySearchTree zoeksnelheid efficiency

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

Toen ik dit programma wordt verondersteld te worden het maken van 4 verschillende maten bomen uit te voeren: 10000, 50000, 100000, 250000 Ik weet dat de snelheid efficiency op zoek BSTS wordt verondersteld O (log n), maar ik krijg de volgende nummers:

bij het doen van 10.000 zoekopdrachten krijg ik deze nummers: (eerste kolom is de grootte van de boom, de tweede is de tijd die nodig was om het zoeken te doen)

10000, 9.000000
50000, 3.000000
100000, 4.000000

bij het doen van 100.000 zoekopdrachten:

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

Eventuele tips worden gewaardeerd.

De vraag is gesteld op 15/05/2011 om 16:24
bron van user
In andere talen...                            


1 antwoorden

stemmen
1

Hoogstwaarschijnlijk je ziet het effect van "missers". Omdat je alleen het zoeken naar willekeurige nummers, nummers die niet in de boom zal een stuk langer dan het aantal dat zijn te nemen.

Ook het rendement van een binaire zoekboom is O (h), waarbij h de hoogte van de boom. Rood-zwarte bomen en AVL bomen garanderen dat ze zullen worden gebouwd met een hoogte van O (log n), maar willekeurig opgebouwd bomen kan gemakkelijk eindigen met een hoogte in de buurt van O (n).

antwoordde op 15/05/2011 om 16:34
bron van user

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