Compare commits
2 Commits
5f369d92f6
...
7d7a2b73d9
| Author | SHA1 | Date | |
|---|---|---|---|
|
7d7a2b73d9
|
|||
|
11b0fae9c7
|
@@ -32,6 +32,12 @@ int h(int x, int m, int i){
|
||||
}
|
||||
};
|
||||
|
||||
int h_kw(int x, int m, int i){
|
||||
g_counter++;
|
||||
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
|
||||
@param A tablica mieszajaca
|
||||
@param m rozmiar tablicy mieszajacej
|
||||
@@ -52,15 +58,40 @@ 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;
|
||||
}
|
||||
|
||||
|
||||
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";
|
||||
@@ -169,8 +200,102 @@ 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";
|
||||
|
||||
|
||||
|
||||
}
|
||||
//...
|
||||
std::cerr<<std::endl;
|
||||
std::cerr<<std::endl;
|
||||
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 wstawiania kwadratowego 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_kw(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";
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
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<double, std::micro> czas = stop - start;
|
||||
std::cerr << "Uplynelo: " << czas.count() << " us\n";
|
||||
std::cerr << "Ilość wywołań funkcji szukającej: " << g_counter << "\n";
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user