TODO: Fix
This commit is contained in:
@@ -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<double, std::micro> 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<double, std::micro> czas = stop - start;
|
||||
std::cerr << "Uplynelo: " << czas.count() << " us\n";
|
||||
std::cerr << "Ilość wywołań funkcji wstawiającej: " << g_counter << "\n";
|
||||
}
|
||||
|
||||
//...
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user