int main( )
        {
            int numItems = 10000;
            LeftistHeap<int> h;
            LeftistHeap<int> h1;
            LeftistHeap<int> h2;
            int i = 37;

            for( i = 37; i != 0; i = ( i + 37 ) % numItems )
                if( i % 2 == 0 )
                    h1.insert( i );
                else
                    h.insert( i );
            h.merge( h1 );
            h2 = h;

            for( i = 1; i < numItems; i++ )
            {
                int x;
                h2.deleteMin( x );
                if( x != i )
                    cout << "Oops! " << i << endl;
            }

            if( !h1.isEmpty( ) )
                cout << "Oops! h1 should have been empty!" << endl;

            return 0;
        }
示例#2
0
 virtual void TearDown()
 {
     skewHeap.Clear();
     leftistHeap.Clear();
     binominalHeap.Clear();
 }
示例#3
0
void heapTests(int seed, int s) {
    srand(seed);  // seed the random number generator
    int array[s]; // create the array to hold random numbers
    int deletes = 0, inserts = 0;
    for (int i = 0; i < s; i++)
        array[i] = rand() % (4 * s) + 1; // number between 1 to 4n + 1

    Timer t;
    
    // binary heap building
    cout << "Binary Heap\n";
    t.start();
    BinaryHeap bHeap(array, s);
    cout << "Build time: ";
    t.printTime(t.stop());
    
    // binary heap insert/deleteMin
    srand(seed);
    t.start();
    for (int j = 0; j < s * 0.1; j++) {
        float r = (float)rand() / (float)RAND_MAX;
        if (r < 0.5) {
            bHeap.deleteMin();
            deletes++;
        } else {
            bHeap.insert(rand() % (4 * s) + 1);
            inserts++;
        }
    }
    cout << "Insert/Delete Time: ";
    t.printTime(t.stop());
    cout << inserts << " inserts\n";
    cout << deletes << " deletes\n\n";
    
    // leftist heap building
    inserts = 0;
    deletes = 0;
    cout << "LeftistHeap Heap\n";
    t.start();
    LeftistHeap lHeap;
    for (int i = 0; i < s; i++) {
        lHeap.insert(array[i]);
    }
        
    cout << "Build time: ";
    t.printTime(t.stop());
    
    // leftist heap insert/deleteMin
    srand(seed);
    t.start();
    for (int j = 0; j < s * 0.1; j++) {
        float r = (float)rand() / (float)RAND_MAX;
        if (r < 0.5) {
            lHeap.deleteMin();
            deletes++;
        } else {
            lHeap.insert(rand() % (4 * s) + 1);
            inserts++;
        }
    }
    cout << "Insert/Delete Time: ";
    t.printTime(t.stop());
    cout << inserts << " inserts\n";
    cout << deletes << " deletes\n\n";

    // skew heap building
    inserts = 0;
    deletes = 0;
    cout << "Skew Heap\n";
    t.start();
    SkewHeap sHeap;
    for (int i = 0; i < s; i++) {
        sHeap.insert(array[i]);
    }
    cout << "Build time: ";
    t.printTime(t.stop());
    
    // skew heap insert/delete
    srand(seed);
    t.start();
    for (int j = 0; j < s * 0.1; j++) {
        float r = (float)rand() / (float)RAND_MAX;
        if (r < 0.5) {
            sHeap.deleteMin();
            deletes++;
        } else {
            sHeap.insert(rand() % (4 * s) + 1);
            inserts++;
        }
    }

    cout << "Insert/Delete Time: ";
    t.printTime(t.stop());
    cout << inserts << " inserts\n";
    cout << deletes << " deletes\n\n";
}