home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ledar34.zip / leda-r-3_4_tar / LEDA-3.4 / prog / prio / prio_test.c < prev    next >
C/C++ Source or Header  |  1996-09-03  |  3KB  |  135 lines

  1. #include <LEDA/_prio.h>
  2.  
  3. #include <LEDA/impl/m_heap.h>
  4. #include <LEDA/impl/k_heap.h>
  5. #include <LEDA/impl/p_heap.h>
  6. #include <LEDA/impl/list_pq.h>
  7.  
  8. typedef float FLOAT;
  9.  
  10.  
  11. void prio_test(priority_queue<int,int>& D, int N, int* A, char* name)
  12.   pq_item* I = new pq_item[N];
  13.  
  14.   cout << string("%-12s",name);
  15.   cout.flush();
  16.  
  17.   float T;
  18.   float T0 = T = used_time();
  19.  
  20.   int i;
  21.   for(i=0; i<N; i++)  I[i] = D.insert(i,A[i]);
  22.   cout << string("%10.2f",used_time(T));
  23.   cout.flush();
  24.  
  25.   for(i=0; i<N; i++)  D.decrease_inf(I[i],A[i]/2);
  26.   cout << string("%14.2f",used_time(T));
  27.   cout.flush();
  28.  
  29.   int old_min = -MAXINT;
  30.  
  31.   for(i=0; i<N; i++)  
  32.   { if (D.inf(D.find_min()) < old_min) cout << "error in del_min\n";
  33.     old_min = D.inf(D.find_min()); 
  34.     D.del_min();
  35.    }
  36.  
  37.   cout << string("%10.2f",used_time(T));
  38.  
  39.   cout << string("%10.2f",used_time(T0));
  40.  
  41.   if (!D.empty()) cout << " NOT EMPTY !!\n";    
  42.  
  43.   newline;
  44.  
  45.   delete I;
  46. }
  47.  
  48.  
  49. void prio_test(priority_queue<FLOAT,FLOAT>& D, int N, FLOAT* A, char* name)
  50.   pq_item* I = new pq_item[N];
  51.  
  52.   cout << string("%-12s",name);
  53.   cout.flush();
  54.  
  55.   float T;
  56.   float T0 = T = used_time();
  57.  
  58.  
  59.   int i;
  60.   for(i=0; i<N; i++)  I[i] = D.insert(FLOAT(i),A[i]);
  61.   cout << string("%10.2f",used_time(T));
  62.   cout.flush();
  63.  
  64.   for(i=0; i<N; i++)  D.decrease_inf(I[i],A[i]/2);
  65.   cout << string("%14.2f",used_time(T));
  66.   cout.flush();
  67.  
  68.   FLOAT old_min = -MAXINT;
  69.  
  70.   for(i=0; i<N; i++)  
  71.   { if (D.inf(D.find_min()) < old_min) cout << "error in del_min\n";
  72.     old_min = D.inf(D.find_min());
  73.     D.del_min();
  74.    }
  75.  
  76.   cout << string("%10.2f",used_time(T));
  77.  
  78.   cout << string("%10.2f",used_time(T0));
  79.  
  80.   if (!D.empty()) cout << " NOT EMPTY !!\n";    
  81.  
  82.   newline;
  83.  
  84.   delete I;
  85. }
  86.  
  87.  
  88.  
  89. main()
  90. { priority_queue<int,int>            Q;
  91.   priority_queue<FLOAT,FLOAT>        Qf;
  92.  
  93.   int    N     = read_int("# keys = ");
  94.   int*   Int   = new int[N];
  95.   FLOAT* Float = new FLOAT[N];
  96.  
  97.   random_source ran(0,1000000);
  98.  
  99.   for(int i=0; i<N; i++) Float[i] = Int[i] = ran();
  100.  
  101.   _priority_queue<int,int,m_heap>    m_q(N);
  102.   _priority_queue<int,int,k_heap>    k_q(N);
  103.   _priority_queue<int,int,p_heap>    p_q;
  104.   _priority_queue<int,int,list_pq>   l_q;
  105.  
  106.   _priority_queue<FLOAT,FLOAT,m_heap>    m_qf(N);
  107.   _priority_queue<FLOAT,FLOAT,k_heap>    k_qf(N);
  108.   _priority_queue<FLOAT,FLOAT,p_heap>    p_qf;
  109.   _priority_queue<FLOAT,FLOAT,list_pq>   l_qf;
  110.  
  111.  
  112.   newline;
  113.   cout << "                insert   decrease_inf  del_min    total\n";
  114.   newline;
  115.  
  116.   prio_test(Q,N,Int,"prio");
  117.   //prio_test(m_q,N,Int,"m_heap");
  118.   prio_test(k_q,N,Int,"k_heap");
  119.   prio_test(p_q,N,Int,"p_heap");
  120.   //prio_test(l_q,N,Int,"list_pq");
  121.   newline;
  122.  
  123.  
  124.   prio_test(Qf,N,Float,"prio");
  125.   //prio_test(m_qf,N,Float,"m_heap");
  126.   prio_test(k_qf,N,Float,"k_heap");
  127.   prio_test(p_qf,N,Float,"p_heap");
  128.   //prio_test(l_qf,N,Float,"list_pq");
  129.   newline;
  130.  
  131.   return 0;
  132. }
  133.