Advertisement
Guest User

Untitled

a guest
May 23rd, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.04 KB | None | 0 0
  1. #include <random>
  2. #include <iomanip>
  3. #include <algorithm>
  4. #include <map>
  5. #include <vector>
  6. #include <time.h>
  7. #include "Tree.h"
  8.  
  9. using namespace std;
  10.  
  11. struct Matavimai {
  12.     float laikas;
  13.     float veiksmai;
  14. };
  15.  
  16. T simpleFind(int id, T *A, int N);
  17. Matavimai demo(int N);
  18.  
  19. void shuffle(int *A, int N);
  20. //void shuffle_almost_sorted(int *A, int N);
  21. //void shuffle_weakly_sorted(int *A, int N);
  22.  
  23.  
  24.  
  25. int main()
  26. {
  27.     //srand(777);
  28.     srand(time(NULL));
  29.     Matavimai m;
  30.     int N = 70;
  31.     for (int i = 0; i < N; i++)
  32.     {
  33.  
  34.         m = demo(N);
  35.         cout << setprecision(3) << N << "  " << m.laikas << endl;
  36.         N = N * 2;
  37.     }
  38.     system("pause");
  39.     return 0;
  40. }
  41.  
  42. int vs;
  43. T simpleFind(int id, T *A, int N) {
  44.     for (int i = 0; i < N; i++) {
  45.         ++vs;
  46.         if (id == A[i].id)
  47.             return A[i];
  48.     }
  49.     T duom;
  50.     duom.id = 0;
  51.     return duom;
  52. }
  53.  
  54. Matavimai demo(int N) {
  55.     //duomenys nuo 1 iki N
  56.     int *Ids = new int[N];
  57.     for (int i = 0; i < N; i++)
  58.         Ids[i] = i + 1;
  59.  
  60.     //masyvas
  61.     T *t1 = new T[N];
  62.     //dvejetainis paieskos medis
  63.     Tree t2;
  64.     //subalansuotas dvejetainis paieskos medis
  65.     map< int, T > t3;
  66.  
  67.     shuffle(Ids, N);
  68.     //shuffle_weakly_sorted(Ids, N);
  69.     //shuffle_almost_sorted(Ids, N);
  70.  
  71.     //duomenu is masyvo Ids irasymas
  72.     //i masyva
  73.     for (int i = 0; i < N; i++) {
  74.         T data;
  75.         data.id = Ids[i];
  76.         t1[i].id = data.id;
  77.     }
  78.     /*
  79.     //i dvejetaini medi
  80.     for (int i = 0; i < N; i++) {
  81.     T data;
  82.     data.id = Ids[i];
  83.     t2.insert(data);
  84.     }
  85.     //i subalansuota stl medi
  86.     for (int i = 0; i < N; i++) {
  87.     T data;
  88.     data.id = Ids[i];
  89.     t3[data.id] = data;
  90.     }
  91.     */
  92.     int kart;
  93.     clock_t time = clock();
  94.     //kartojam, kol matavimai nepasieks triju zenklu tikslumo
  95.     //for (kart = 0; clock() - time < 1000; kart++) {
  96.  
  97.     //arba galime kartojimu skaiciu valdyti tiesiogiai
  98.     kart = 1000;
  99.     for (int i = 0; i < kart; i++) {
  100.         t2.veiksmai = 0;
  101.         vs = 0;
  102.         for (int j = 1; j <= N; j++) {
  103.             if (simpleFind(j, t1, N).id != j)//MASYVAS
  104.                                              //if (t2.find(j) == NULL)//DVEJETAINIS MEDIS
  105.                                              //if (t3[j].id != j)//SUBALANSUOTAS MEDIS
  106.                 cout << " klaida: nerado " << j << endl;
  107.  
  108.         }
  109.     }
  110.     time = clock() - time;
  111.     float sec1 = (float)time / ((float)kart*(float)N*(float)CLOCKS_PER_SEC);
  112.  
  113.     delete[] t1;
  114.     delete[] Ids;
  115.     Matavimai r;
  116.     r.laikas = sec1;
  117.     r.veiksmai = (float)max(vs, t2.veiksmai) / (float)N;
  118.     return r;
  119. }
  120.  
  121. void shuffle(int *A, int N) {
  122.     for (int i = 0; i < N - 1; i++) {
  123.         //j = i ... N-1
  124.         int j = i + (rand() % (N - i));
  125.         swap(A[i], A[j]);
  126.     }
  127. }
  128.  
  129. /*
  130. void shuffle_almost_sorted(int *A, int N) {
  131. vector<int> V(N);
  132. for (int i = 0; i < N; i++)
  133. V[i] = A[i];
  134. std::sort(V.begin(), V.end());
  135. for (int i = 0; i < N; i++)
  136. A[i] = V[i];
  137.  
  138. for (int i = 0; i < sqrt(N); i++) {
  139. int i1 = rand() % N;
  140. int i2 = rand() % N;
  141. swap(A[i1], A[i2]);
  142. }
  143. }
  144.  
  145. void shuffle_weakly_sorted(int *A, int N) {
  146. vector<int> V(N);
  147. for (int i = 0; i < N; i++)
  148. V[i] = A[i];
  149. std::sort(V.begin(), V.end());
  150. for (int i = 0; i < N; i++)
  151. A[i] = V[i];
  152.  
  153. int N2 = N - (int)pow((float)N, 0.9);
  154. for (int i = 0; i < N2; i++) {
  155. int i1 = rand() % N;
  156. int i2 = rand() % N;
  157. swap(A[i1], A[i2]);
  158. }
  159. }
  160. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement