BinarySearchTree αναζήτηση της αποτελεσματικότητας της ταχύτητας

ψήφοι
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();
}
}

Όταν εκτελέσετε αυτό το πρόγραμμα που υποτίθεται ότι πρέπει να κάνει 4 διαφορετικού μεγέθους δέντρα: 10000, 50000, 100000, 250000 ξέρω ότι η απόδοση της ταχύτητας για την αναζήτηση BSTs υποτίθεται ότι είναι O (log n), αλλά έχω πάρει αυτούς τους αριθμούς:

όταν κάνει 10.000 αναζητήσεις έχω αυτούς τους αριθμούς: (πρώτη στήλη είναι το μέγεθος του δέντρου, το δεύτερο είναι ο χρόνος που χρειάστηκε για να κάνει την αναζήτηση)

10000, 9.000000
50000, 3.000000
100000, 4.000000

όταν κάνει 100.000 αναζητήσεις:

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

Οποιεσδήποτε συμβουλές εκτιμηθεί.

Δημοσιεύθηκε 15/05/2011 στις 16:24
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Το πιο πιθανό βλέπετε το αποτέλεσμα της «χάνει». Δεδομένου ότι είστε απλά ψάχνουν για τυχαίους αριθμούς, αριθμούς που δεν είναι στο δέντρο θα χρειαστεί πολύ περισσότερο χρόνο από ό, τι αριθμό που είναι.

Επίσης, η απόδοση ενός δυαδικού δέντρου αναζήτησης είναι O (h), όπου h είναι το ύψος του δέντρου. Κόκκινο-Μαύρο δέντρα και AVL δέντρα εγγυηθεί ότι θα κατασκευαστεί με ύψος O (log n), αλλά τυχαία κατασκευάστηκε δέντρα θα μπορούσαν εύκολα να καταλήξετε με ύψος κοντά σε O (n).

Απαντήθηκε 15/05/2011 στις 16:34
πηγή χρήστη

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