BinarySearchTree arama hız verimliliği

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

Ben 4 farklı büyüklükteki ağaçları yapma olması gerekiyordu bu programı çalıştırdığınızda: 10000, 50000, 100000, 250000 ben aramaya BSTS hız verimliliği O (n Log) olması gerekiyordu ama bu sayıları alıyorum biliyoruz:

10.000 arama yaparken ben bu sayıları alıyorum: (ilk sütun ağacının boyutudur, ikinci o arama yapmak için geçen zamanı)

10000, 9.000000
50000, 3.000000
100000, 4.000000

ne zaman 100.000 arama yaparken:

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

Herhangi bir ipucu takdir edilmektedir.

Oluştur 15/05/2011 saat 16:24
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
1

Büyük olasılıkla "başarılı" etkisini görüyoruz. Sadece vardır sayısından daha uzun bir çok alacaktır ağaçta olmayan rastgele sayılar, sayılar arıyoruz yana.

Aynı zamanda, bir ikili arama ağacının etkinliği h ağacının yükseltir O, (H) 'dir. Kırmızı-siyah ağaçları ve AVL ağaçları da O (n günlük) bir yüksekliğe sahip inşa edilecek, ancak rastgele oluşturulmuş ağaç kolayca yakın O (n) için bir yüksekliğe ile sonuçlanan garanti.

Cevap 15/05/2011 saat 16:34
kaynak kullanıcı

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