prio_test.c
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:3k
开发平台:

MultiPlatform

  1. #include <LEDA/_prio.h>
  2. #include <LEDA/impl/m_heap.h>
  3. #include <LEDA/impl/k_heap.h>
  4. #include <LEDA/impl/p_heap.h>
  5. #include <LEDA/impl/list_pq.h>
  6. typedef float FLOAT;
  7. void prio_test(priority_queue<int,int>& D, int N, int* A, char* name)
  8.   pq_item* I = new pq_item[N];
  9.   cout << string("%-12s",name);
  10.   cout.flush();
  11.   float T;
  12.   float T0 = T = used_time();
  13.   int i;
  14.   for(i=0; i<N; i++)  I[i] = D.insert(i,A[i]);
  15.   cout << string("%10.2f",used_time(T));
  16.   cout.flush();
  17.   for(i=0; i<N; i++)  D.decrease_inf(I[i],A[i]/2);
  18.   cout << string("%14.2f",used_time(T));
  19.   cout.flush();
  20.   int old_min = -MAXINT;
  21.   for(i=0; i<N; i++)  
  22.   { if (D.inf(D.find_min()) < old_min) cout << "error in del_minn";
  23.     old_min = D.inf(D.find_min()); 
  24.     D.del_min();
  25.    }
  26.   cout << string("%10.2f",used_time(T));
  27.   cout << string("%10.2f",used_time(T0));
  28.   if (!D.empty()) cout << " NOT EMPTY !!n";
  29.   newline;
  30.   delete I;
  31. }
  32. void prio_test(priority_queue<FLOAT,FLOAT>& D, int N, FLOAT* A, char* name)
  33.   pq_item* I = new pq_item[N];
  34.   cout << string("%-12s",name);
  35.   cout.flush();
  36.   float T;
  37.   float T0 = T = used_time();
  38.   int i;
  39.   for(i=0; i<N; i++)  I[i] = D.insert(i,A[i]);
  40.   cout << string("%10.2f",used_time(T));
  41.   cout.flush();
  42.   for(i=0; i<N; i++)  D.decrease_inf(I[i],A[i]/2);
  43.   cout << string("%14.2f",used_time(T));
  44.   cout.flush();
  45.   FLOAT old_min = -MAXINT;
  46.   for(i=0; i<N; i++)  
  47.   { if (D.inf(D.find_min()) < old_min) cout << "error in del_minn";
  48.     old_min = D.inf(D.find_min());
  49.     D.del_min();
  50.    }
  51.   cout << string("%10.2f",used_time(T));
  52.   cout << string("%10.2f",used_time(T0));
  53.   if (!D.empty()) cout << " NOT EMPTY !!n";
  54.   newline;
  55.   delete I;
  56. }
  57. main()
  58. { priority_queue<int,int>            Q;
  59.   priority_queue<FLOAT,FLOAT>        Qf;
  60.   int    N     = read_int("# keys = ");
  61.   int*   Int   = new int[N];
  62.   FLOAT* Float = new FLOAT[N];
  63.   random_source ran(0,1000000);
  64.   for(int i=0; i<N; i++) Float[i] = Int[i] = ran();
  65.   _priority_queue<int,int,m_heap>    m_q(N);
  66.   _priority_queue<int,int,k_heap>    k_q(N);
  67.   _priority_queue<int,int,p_heap>    p_q;
  68.   _priority_queue<int,int,list_pq>   l_q;
  69.   _priority_queue<FLOAT,FLOAT,m_heap>    m_qf(N);
  70.   _priority_queue<FLOAT,FLOAT,k_heap>    k_qf(N);
  71.   _priority_queue<FLOAT,FLOAT,p_heap>    p_qf;
  72.   _priority_queue<FLOAT,FLOAT,list_pq>   l_qf;
  73.   newline;
  74.   cout << "                insert   decrease_inf  del_min    totaln";
  75.   newline;
  76.   prio_test(Q,N,Int,"prio");
  77.   //prio_test(m_q,N,Int,"m_heap");
  78.   prio_test(k_q,N,Int,"k_heap");
  79.   prio_test(p_q,N,Int,"p_heap");
  80.   //prio_test(l_q,N,Int,"list_pq");
  81.   newline;
  82.   prio_test(Qf,N,Float,"prio");
  83.   //prio_test(m_qf,N,Float,"m_heap");
  84.   prio_test(k_qf,N,Float,"k_heap");
  85.   prio_test(p_qf,N,Float,"p_heap");
  86.   //prio_test(l_qf,N,Float,"list_pq");
  87.   newline;
  88.  
  89.   return 0;
  90. }