Kwadratowe i wyniki szukania

This commit is contained in:
2023-05-10 14:58:09 +02:00
parent 5f369d92f6
commit 11b0fae9c7

View File

@@ -32,6 +32,11 @@ 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;
};
/** Funkcja wstawiajaca jeden element x do tablicy mieszajacej tab o rozmiarze m
@param A tablica mieszajaca
@param m rozmiar tablicy mieszajacej
@@ -52,13 +57,13 @@ bool hash_al_wstaw(int * A, int m, int x)
return false;
}
bool hash_al_szukaj(int x, int m, int * A){
for (int i = 0; i < m; i++) {
int k = h(x, i, m);
if (A[k] == x){ return true;}
if (A[k] == EMPTY){ return false;}
}
return false;
bool hash_al_szukaj(int * A, int m, int x){
for (int i = 0; i < m; i++) {
int k = h(x, m, i);
if (A[k] == x){ return true;}
if (A[k] == EMPTY){ return false;}
}
return false;
}
int main()
@@ -169,6 +174,38 @@ int main()
}
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(tab, m, dane[i]);
}
g_counter = 0;
// Mierzenie czasu, przyklad:
std::cerr << "Pomiar wyszukiwania 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(tab, m, dane[idx]);
idx = idx+krok;
}
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 szukającej: " << g_counter << "\n";
}
//...