From 741a2999a2dffb69cead5da8c1feecb341c09a2c Mon Sep 17 00:00:00 2001 From: VectorKappa Date: Wed, 26 Apr 2023 15:15:56 +0200 Subject: [PATCH] TODO: Fix --- projekt 2/main.cpp | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/projekt 2/main.cpp b/projekt 2/main.cpp index 57ab549..28174a3 100644 --- a/projekt 2/main.cpp +++ b/projekt 2/main.cpp @@ -14,6 +14,7 @@ #define EMPTY -1 // puste miejsce w tablicy mieszajacej #define REMOVED -2 // puste miejsce tablicy mieszajacej z ktorego usuniety zostal jakis element +long long int g_counter {0}; //Zad. 1 Wstawianie do tablicy mieszajacej (adresowanie liniowe) /** Funkcja mieszająca wykorzystująca adresowanie liniowe @@ -23,6 +24,7 @@ @return wartość f. mieszającej, pod ten indeks próbujemy wstawić potem x */ int h(int x, int m, int i){ + g_counter++; if (i==0) { return x % m; } else { @@ -106,23 +108,52 @@ int main() // b) Tablica mieszajaca // Utworz pusta tablice mieszajaca tab o rozmiarze m = 2097152 (2 do potegi 21) const int m = 2097152; - // int * tab = ...; + int * tab = new int[m]; + for (int i = 0; i < m ; i++) + { + tab[i] = EMPTY; + } + // ... // c) Wstaw 10000 elemetow z tablicy dane do pustej tablicy mieszajacej tab (zapelnienie 0%). Na tej podstawie zmierz sredni czas wstawiania elementu oraz srednią liczbe wywolan funkcji mieszajacej przy wstawianiu elementu do pustej tablicy. std::cout << "Pomiary:\n"; + g_counter = 0; // Mierzenie czasu, przyklad: auto start = std::chrono::high_resolution_clock::now(); - //tutaj mierzona operacja + for (int i = 0; i < 10000; i++) { + hash_al_wstaw(tab, m, dane[i]); + } + + //tutaj mierzona operacja auto stop = std::chrono::high_resolution_clock::now(); std::chrono::duration czas = stop - start; std::cerr << "Uplynelo: " << czas.count() << " us\n"; - - // d) Zmierz sredni czas wstawiania elementu oraz srednią liczbe wywolan funkcji mieszajacej przy wstawianiu elementu do tablicy wypelnionej w 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90% (dla próbki: 10000 elementów). + std::cerr << "Ilość wywołań funkcji wstawiającej: " << g_counter << "\n"; + // d) Zmierz sredni czas wstawiania elementu oraz srednią liczbe wywolan funkcji mieszajacej przy wstawianiu elementu do tablicy wypelnionej w 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90% (dla próbki: 10000 elementów). //UWAGA! Do tablicy mieszajacej nie wstawiac elementow, ktore juz w niej sa. + for(double range : {0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9}){ + g_counter = 0; + for (int i = 0; i < range*m; i++) { + hash_al_wstaw(tab, m, dane[i]); + } - //... + + g_counter = 0; + // Mierzenie czasu, przyklad: + std::cerr << "Pomiar dla " << range*100 << "%\n"; + auto start = std::chrono::high_resolution_clock::now(); + for (int i = range*m; i < (range*m)+10000; i++) { + hash_al_wstaw(tab, m, dane[i]); + } + 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 wstawiającej: " << g_counter << "\n"; + } + + //... return 0; }