Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <chrono>
- #include <thread>
- #include <random>
- #include <iostream>
- int licznik = 0;
- int n = 10000;
- int losowa_liczba(int min = 0, int max = std::numeric_limits<int>::max())
- {
- static std::default_random_engine gen(std::random_device{}());
- static std::uniform_int_distribution<int> dist;
- return dist(gen, std::uniform_int_distribution<int>::param_type{ min, max });
- }
- bool hash_al_wstaw(int x, int* tab, int N)
- {
- int k = 0;
- for (int i = 0; N - 1; i++)
- {
- licznik++;
- k = ((x%N) + i) % N;
- if (tab[k] == -1)
- {
- tab[k] = x;
- return true;
- }
- }
- return false;
- }
- int main()
- {
- const int N = 1000000;
- int* tab = new int[N];
- for (int i = 0; i < N; i++)
- {
- tab[i] = -1;
- }
- const int M = 100000;
- int* tab1 = new int[M];
- for (int i = 0; i < M; i++)
- {
- ;
- tab1[i] = losowa_liczba();
- }
- for (int l = 0; l <= 9; l++)
- {
- auto start = std::chrono::high_resolution_clock::now();
- for (int i = (M / 10)*l; i < (M / 10)*l + n; i++)
- {
- hash_al_wstaw(tab1[i], tab, N);
- }
- auto end = std::chrono::high_resolution_clock::now();
- std::chrono::duration<double, std::micro> duration = end - start;
- std::cerr << "Uplynelo: " << duration.count() / 10000 << "us " << 10 * l << "% \n";
- std::cout << licznik << "\n";
- for (int i = (N / 10)*l + n; i < (N / 10)*l; i++)
- {
- hash_al_wstaw(losowa_liczba(), tab, N);
- }
- }
- delete[] tab;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement