Advertisement
Guest User

Untitled

a guest
May 21st, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.44 KB | None | 0 0
  1. #include <chrono>
  2. #include <thread>
  3. #include <random>
  4. #include <iostream>
  5.  
  6.  
  7.  
  8. int licznik = 0;
  9. int n = 10000;
  10. int losowa_liczba(int min = 0, int max = std::numeric_limits<int>::max())
  11. {
  12. static std::default_random_engine gen(std::random_device{}());
  13. static std::uniform_int_distribution<int> dist;
  14. return dist(gen, std::uniform_int_distribution<int>::param_type{ min, max });
  15. }
  16. bool hash_al_wstaw(int x, int* tab, int N)
  17. {
  18.  
  19. int k = 0;
  20. for (int i = 0; N - 1; i++)
  21. {
  22. licznik++;
  23. k = ((x%N) + i) % N;
  24. if (tab[k] == -1)
  25. {
  26. tab[k] = x;
  27. return true;
  28. }
  29. }
  30. return false;
  31. }
  32. int main()
  33. {
  34.  
  35. const int N = 1000000;
  36. int* tab = new int[N];
  37. for (int i = 0; i < N; i++)
  38. {
  39. tab[i] = -1;
  40. }
  41. const int M = 100000;
  42. int* tab1 = new int[M];
  43. for (int i = 0; i < M; i++)
  44. {
  45. ;
  46. tab1[i] = losowa_liczba();
  47. }
  48.  
  49.  
  50. for (int l = 0; l <= 9; l++)
  51. {
  52.  
  53.  
  54. auto start = std::chrono::high_resolution_clock::now();
  55. for (int i = (M / 10)*l; i < (M / 10)*l + n; i++)
  56. {
  57.  
  58. hash_al_wstaw(tab1[i], tab, N);
  59. }
  60. auto end = std::chrono::high_resolution_clock::now();
  61. std::chrono::duration<double, std::micro> duration = end - start;
  62. std::cerr << "Uplynelo: " << duration.count() / 10000 << "us " << 10 * l << "% \n";
  63. std::cout << licznik << "\n";
  64.  
  65. for (int i = (N / 10)*l + n; i < (N / 10)*l; i++)
  66. {
  67. hash_al_wstaw(losowa_liczba(), tab, N);
  68. }
  69.  
  70. }
  71. delete[] tab;
  72. system("pause");
  73. return 0;
  74.  
  75.  
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement