Advertisement
Guest User

Untitled

a guest
May 21st, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. #include <chrono>
  2. #include <thread>
  3. #include <random>
  4. #include <iostream>
  5. #include <algorithm>
  6.  
  7.  
  8. int licznik1 = 0;
  9. int licznik = 0;
  10. int n = 10000;
  11. int losowa_liczba(int min = 0, int max = std::numeric_limits<int>::max())
  12. {
  13. static std::default_random_engine gen(std::random_device{}());
  14. static std::uniform_int_distribution<int> dist;
  15. return dist(gen, std::uniform_int_distribution<int>::param_type{ min, max });
  16. }
  17. bool hash_al_wstaw(int x, int* tab, int N)
  18. {
  19.  
  20. int k = 0;
  21. for (int i = 0; N - 1; i++)
  22. {
  23. licznik++;
  24. k = ((x%N) + i) % N;
  25. if (tab[k] == -1)
  26. {
  27. tab[k] = x;
  28. return true;
  29. }
  30. }
  31. return false;
  32.  
  33. }
  34.  
  35. int hash_al_szukaj(int x, int*tab,int N)
  36. {
  37. int k = 0;
  38. for (int i = 0; N - 1; i++)
  39. {
  40. licznik1++;
  41. //int k = ((x%N) + i) % N;
  42. int k = (((x%N) + i*(((x / N) % (n / 2))) * 2) + 1) % N;
  43. if (tab[k] == x)
  44. {
  45. return true;
  46. }
  47. if (tab[k] == -1)
  48. return false;
  49. }
  50. return false;
  51. }
  52.  
  53. int main()
  54. {
  55. std::default_random_engine gen(std::random_device{}());
  56.  
  57. const int N = 1000000;
  58. int* tab = new int[N];
  59. for (int i = 0; i < N; i++)
  60. {
  61. tab[i] = -1;
  62. }
  63. const int M = 100000;
  64. int* tab1 = new int[M];
  65. for (int i = 0; i < M; i++)
  66. {
  67.  
  68. tab1[i] = losowa_liczba();
  69. }
  70.  
  71.  
  72. for (int l = 0; l <= 9; l++)
  73. {
  74.  
  75. licznik = licznik1 = 0;
  76. auto start = std::chrono::high_resolution_clock::now();
  77. for (int i = (M / 10)*l; i < (M / 10)*l + n; i++)
  78. {
  79.  
  80. hash_al_wstaw(tab1[i], tab, N);
  81. }
  82.  
  83.  
  84.  
  85.  
  86.  
  87. auto end = std::chrono::high_resolution_clock::now();
  88. std::chrono::duration<double, std::micro> duration = end - start;
  89. std::cerr << "Wstawianie : " << duration.count() / 10000 << "us dla " << 10 * l << "% ";
  90. std::cout << licznik / 10000.0 << "\n";
  91. shuffle(tab1, tab1 + (1 + l)*n, gen);
  92. start = std::chrono::high_resolution_clock::now();
  93. for (int i = 0; i < n; i++)
  94. {
  95.  
  96. if (!hash_al_szukaj(tab1[i], tab, N))
  97. std::cout << "error";
  98. }
  99.  
  100.  
  101.  
  102. end = std::chrono::high_resolution_clock::now();
  103. duration = end - start;
  104. std::cerr << "Szukanie : " << duration.count() / 10000 << "us dla " << 10 * l << "% ";
  105. std::cout << licznik1 / 10000.0 << "\n";
  106.  
  107.  
  108.  
  109. for (int i = 0; i < M - n; i++)
  110. {
  111. hash_al_wstaw(losowa_liczba(), tab, N);
  112. }
  113.  
  114. std::cerr << "\n";
  115. }
  116.  
  117.  
  118. delete[] tab;
  119. system("pause");
  120. return 0;
  121.  
  122.  
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement