Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. #include "pch.h"
  2. #include "stdafx.h"
  3. #include <random>
  4. #include <iomanip>
  5. #include <algorithm>
  6. #include <map>
  7. #include <vector>
  8. #include <time.h>
  9. #include "tree.h"
  10.  
  11. using namespace std;
  12.  
  13. struct Matavimas {
  14. float laikasTree;
  15. float laikasMap;
  16. };
  17.  
  18. Matavimas TestTrees(int N, int sortType);
  19. void shuffle(int *A, int N);
  20. void shuffle_weakly_sorted(int *A, int N);
  21.  
  22. int main()
  23. {
  24. srand(time(NULL));
  25. Matavimas dvejM;
  26. int N = 30;
  27.  
  28. for (int i = 0; i < 4; i++)
  29. {
  30. cout << "---------------------------------------\nDuomenu skaicius: " << N << endl;
  31.  
  32. dvejM = TestTrees(N, 1);
  33. cout << " Sumaisyta atsitiktine tvarka seka: " << endl;
  34. cout << setprecision(3) << " Paieskos laikas dvejetainiame : " << dvejM.laikasTree << endl;
  35. cout << setprecision(3) << " Paieskos laikas subalansuotame: " << dvejM.laikasMap << endl;
  36. cout << endl;
  37.  
  38. dvejM = TestTrees(N, 2);
  39. cout << " Silpnai rusiuota seka: " << endl;
  40. cout << setprecision(3) << " Paieskos laikas dvejetainiame : " << dvejM.laikasTree << endl;
  41. cout << setprecision(3) << " Paieskos laikas subalansuotame: " << dvejM.laikasMap << endl;
  42.  
  43. N = N * 2;
  44. }
  45.  
  46. return 0;
  47. }
  48.  
  49. Matavimas TestTrees(int N, int sortType)
  50. {
  51. int *Ids = new int[N];
  52. for (int i = 0; i < N; i++)
  53. Ids[i] = i + 1;
  54.  
  55. //dvejetainis paieskos medis
  56. Tree t2;
  57. //subalansuotas dvejetainis paieskos medis
  58. map<int, T> t3;
  59.  
  60. if (sortType == 1)
  61. shuffle(Ids, N);
  62. else if (sortType == 2)
  63. shuffle_weakly_sorted(Ids, N);
  64.  
  65. //i dvejetaini medi
  66. for (int i = 0; i < N; i++) {
  67. T data;
  68. data.id = Ids[i];
  69. t2.insert(data);
  70. }
  71. //i subalansuota stl medi
  72. for (int i = 0; i < N; i++) {
  73. T data;
  74. data.id = Ids[i];
  75. t3[data.id] = data;
  76. }
  77.  
  78. Matavimas mat;
  79. int kart;
  80. kart = 1000;
  81.  
  82. //DVEJETAINIS MEDIS
  83. clock_t time = clock();
  84. for (int i = 0; i < kart; i++) {
  85.  
  86. for (int j = 1; j <= N; j++) {
  87. if (t2.find(j) == NULL)
  88. cout << " klaida: nerado dvejetainiame medyje " << j << endl;
  89. }
  90. }
  91. time = clock() - time;
  92. float sec1 = (float)time / ((float)kart*(float)N*(float)CLOCKS_PER_SEC);
  93.  
  94. mat.laikasTree = sec1;
  95.  
  96. //SUBALANSUOTAS MEDIS
  97. time = clock();
  98. for (int i = 0; i < kart; i++) {
  99.  
  100. for (int j = 1; j <= N; j++) {
  101. if (t3[j].id != j)
  102. cout << " klaida: nerado subalansuotame medyje" << j << endl;
  103. }
  104. }
  105. time = clock() - time;
  106. sec1 = (float)time / ((float)kart*(float)N*(float)CLOCKS_PER_SEC);
  107.  
  108. mat.laikasMap = sec1;
  109.  
  110. delete[] Ids;
  111.  
  112. return mat;
  113. }
  114.  
  115. void shuffle(int *A, int N) {
  116. for (int i = 0; i < N - 1; i++) {
  117. //j = i ... N-1
  118. int j = i + (rand() % (N - i));
  119. swap(A[i], A[j]);
  120. }
  121. }
  122.  
  123. void shuffle_weakly_sorted(int *A, int N)
  124. {
  125. vector<int> V(N);
  126.  
  127. for (int i = 0; i < N; i++)
  128. V[i] = A[i];
  129. std::sort(V.begin(), V.end());
  130. for (int i = 0; i < N; i++)
  131. A[i] = V[i];
  132.  
  133. int N2 = N - (int)pow((float)N, 0.9);
  134.  
  135. for (int i = 0; i < N2; i++) {
  136. int i1 = rand() % N;
  137. int i2 = rand() % N;
  138. swap(A[i1], A[i2]);
  139. }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement