diff --git a/projekt 2/main.cpp b/projekt 2/main.cpp index fd5c1f7..c24a19e 100644 --- a/projekt 2/main.cpp +++ b/projekt 2/main.cpp @@ -34,7 +34,8 @@ int h(int x, int m, int i){ int h_kw(int x, int m, int i){ g_counter++; - return ((x % m) + (2 * i * i) - (5*i)) % m; + int formula = ((x % m) + (2 * i * i) - (5*i)) % m; + return (formula<0) ? m+formula : formula; }; /** Funkcja wstawiajaca jeden element x do tablicy mieszajacej tab o rozmiarze m @@ -66,6 +67,31 @@ bool hash_al_szukaj(int * A, int m, int x){ return false; } + +bool hash_al_wstaw_kw(int * A, int m, int x) +{ + // Zaimplementuj + //... + for (int i = 0; i < m-1; i++) { + int k = h_kw(x, m, i); + if (A[k] == EMPTY || A[k] == REMOVED){ + A[k]=x; + return true; + } + } + return false; +} + +bool hash_al_szukaj_kw(int * A, int m, int x){ + for (int i = 0; i < m; i++) { + int k = h_kw(x, m, i); + if (A[k] == x){ return true;} + if (A[k] == EMPTY){ return false;} + } + return false; + } + + int main() { std::cout << "Zadanie 1 i 2:\n"; @@ -207,7 +233,69 @@ int main() } //... + std::cerr< czas = stop - start; + std::cerr << "Uplynelo: " << czas.count() << " us\n"; + std::cerr << "Ilość wywołań funkcji wstawiającej: " << g_counter << "\n"; + + + + } + + std::cerr << std::endl; + for(double range : {0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9}){ + for (int i = 0; i < m ; i++) + { + tab[i] = EMPTY; + } + + g_counter = 0; + for (int i = 0; i < range*m; i++) { + hash_al_wstaw_kw(tab, m, dane[i]); + } + + + g_counter = 0; + // Mierzenie czasu, przyklad: + std::cerr << "Pomiar wyszukiwania kwadratowego dla " << range*100 << "%\n"; + int idx=0; + int krok = (range*m)/10000; + auto start = std::chrono::high_resolution_clock::now(); + for (int i = 0; i < 10000; i++) { + hash_al_szukaj_kw(tab, m, dane[idx]); + idx = idx+krok; + + } + auto stop = std::chrono::high_resolution_clock::now(); + std::chrono::duration czas = stop - start; + std::cerr << "Uplynelo: " << czas.count() << " us\n"; + std::cerr << "Ilość wywołań funkcji szukającej: " << g_counter << "\n"; + + + + } return 0; }