Compare commits

...

2 Commits

Author SHA1 Message Date
ac9feec8dd Dodano wyniki 2023-05-30 21:12:09 +02:00
6da16b20cf Koniec zabawy. Closes #8, #9, #10, #11 2023-05-24 14:56:02 +02:00
2 changed files with 297 additions and 6 deletions

View File

@@ -35,10 +35,20 @@ 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;
return (formula<0) ? (m+formula)%m : formula;
};
/** Funkcja wstawiajaca jeden element x do tablicy mieszajacej tab o rozmiarze m
int h_d(int x, int m, int i){
g_counter++;
int formula = ((x % m) + i*((((x/m)%(m/2))*2) + 1))%m;
return formula;
};
/*
*h(x, i, m) = (h1(x, m) + i*(h2(x, m)) mod m dla: i = 0, 1, 2, . . . , m 1,
h1(x, m) = x mod m,
h2(x, m) = (((x/m) mod (m/2)) * 2) + 1.
*
** Funkcja wstawiajaca jeden element x do tablicy mieszajacej tab o rozmiarze m
@param A tablica mieszajaca
@param m rozmiar tablicy mieszajacej
@param x element wstawiany do tablicy
@@ -91,6 +101,28 @@ bool hash_al_szukaj_kw(int * A, int m, int x){
return false;
}
bool hash_al_wstaw_d(int * A, int m, int x)
{
// Zaimplementuj
//...
for (int i = 0; i < m-1; i++) {
int k = h_d(x, m, i);
if (A[k] == EMPTY || A[k] == REMOVED){
A[k]=x;
return true;
}
}
return false;
}
bool hash_al_szukaj_d(int * A, int m, int x){
for (int i = 0; i < m; i++) {
int k = h_d(x, m, i);
if (A[k] == x){ return true;}
if (A[k] == EMPTY){ return false;}
}
return false;
}
int main()
{
@@ -172,7 +204,7 @@ int main()
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}){
for(double range : {0.0,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;
@@ -201,7 +233,7 @@ 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(double range : {0.0,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;
@@ -236,7 +268,7 @@ int main()
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(double range : {0.0,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;
@@ -265,7 +297,7 @@ 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(double range : {0.0,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;
@@ -297,5 +329,66 @@ int main()
}
std::cerr<<std::endl;
std::cerr<<std::endl;
std::cerr<<std::endl;
for(double range : {0.0,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_d(tab, m, dane[i]);
}
g_counter = 0;
// Mierzenie czasu, przyklad:
std::cerr << "Pomiar wstawiania podwójnego 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_d(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.0,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_d(tab, m, dane[i]);
}
g_counter = 0;
// Mierzenie czasu, przyklad:
std::cerr << "Pomiar wyszukiwania podwójnego 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_d(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;
}

198
projekt 2/wyniki Normal file
View File

@@ -0,0 +1,198 @@
ccache g++ main.cpp -O3 ; ./a.out
Zadanie 1 i 2:
indeks: 0 1 2 3 4 5 6 7
| 8| 32| 18| 11| 3| 19| 6| 27|
Zadanie 3:
Pomiary:
Uplynelo: 126.55 us
Ilość wywołań funkcji wstawiającej: 10027
Pomiar dla 0%
Uplynelo: 138.935 us
Ilość wywołań funkcji wstawiającej: 10027
Pomiar dla 10%
Uplynelo: 207.2 us
Ilość wywołań funkcji wstawiającej: 11134
Pomiar dla 20%
Uplynelo: 171.703 us
Ilość wywołań funkcji wstawiającej: 12586
Pomiar dla 30%
Uplynelo: 223.379 us
Ilość wywołań funkcji wstawiającej: 14719
Pomiar dla 40%
Uplynelo: 228.542 us
Ilość wywołań funkcji wstawiającej: 18122
Pomiar dla 50%
Uplynelo: 405.386 us
Ilość wywołań funkcji wstawiającej: 23967
Pomiar dla 60%
Uplynelo: 641.565 us
Ilość wywołań funkcji wstawiającej: 34883
Pomiar dla 70%
Uplynelo: 655.346 us
Ilość wywołań funkcji wstawiającej: 58539
Pomiar dla 80%
Uplynelo: 920.719 us
Ilość wywołań funkcji wstawiającej: 141291
Pomiar dla 90%
Uplynelo: 2630.29 us
Ilość wywołań funkcji wstawiającej: 1031327
Pomiar wyszukiwania dla 0%
Uplynelo: 16.316 us
Ilość wywołań funkcji szukającej: 10000
Pomiar wyszukiwania dla 10%
Uplynelo: 179.774 us
Ilość wywołań funkcji szukającej: 10469
Pomiar wyszukiwania dla 20%
Uplynelo: 215.523 us
Ilość wywołań funkcji szukającej: 11063
Pomiar wyszukiwania dla 30%
Uplynelo: 225.127 us
Ilość wywołań funkcji szukającej: 11869
Pomiar wyszukiwania dla 40%
Uplynelo: 222.726 us
Ilość wywołań funkcji szukającej: 13028
Pomiar wyszukiwania dla 50%
Uplynelo: 281.561 us
Ilość wywołań funkcji szukającej: 14451
Pomiar wyszukiwania dla 60%
Uplynelo: 306.791 us
Ilość wywołań funkcji szukającej: 16648
Pomiar wyszukiwania dla 70%
Uplynelo: 347.754 us
Ilość wywołań funkcji szukającej: 20499
Pomiar wyszukiwania dla 80%
Uplynelo: 448.781 us
Ilość wywołań funkcji szukającej: 28296
Pomiar wyszukiwania dla 90%
Uplynelo: 537.918 us
Ilość wywołań funkcji szukającej: 60891
Pomiar wstawiania kwadratowego dla 0%
Uplynelo: 172.556 us
Ilość wywołań funkcji wstawiającej: 10026
Pomiar wstawiania kwadratowego dla 10%
Uplynelo: 311.798 us
Ilość wywołań funkcji wstawiającej: 11094
Pomiar wstawiania kwadratowego dla 20%
Uplynelo: 231.598 us
Ilość wywołań funkcji wstawiającej: 12526
Pomiar wstawiania kwadratowego dla 30%
Uplynelo: 235.907 us
Ilość wywołań funkcji wstawiającej: 14433
Pomiar wstawiania kwadratowego dla 40%
Uplynelo: 428.465 us
Ilość wywołań funkcji wstawiającej: 17060
Pomiar wstawiania kwadratowego dla 50%
Uplynelo: 483.488 us
Ilość wywołań funkcji wstawiającej: 21127
Pomiar wstawiania kwadratowego dla 60%
Uplynelo: 560.193 us
Ilość wywołań funkcji wstawiającej: 26632
Pomiar wstawiania kwadratowego dla 70%
Uplynelo: 756.761 us
Ilość wywołań funkcji wstawiającej: 37045
Pomiar wstawiania kwadratowego dla 80%
Uplynelo: 1135.67 us
Ilość wywołań funkcji wstawiającej: 57629
Pomiar wstawiania kwadratowego dla 90%
Uplynelo: 1795.81 us
Ilość wywołań funkcji wstawiającej: 148303
Pomiar wyszukiwania kwadratowego dla 0%
Uplynelo: 32.94 us
Ilość wywołań funkcji szukającej: 10000
Pomiar wyszukiwania kwadratowego dla 10%
Uplynelo: 214.541 us
Ilość wywołań funkcji szukającej: 10465
Pomiar wyszukiwania kwadratowego dla 20%
Uplynelo: 284.842 us
Ilość wywołań funkcji szukającej: 11039
Pomiar wyszukiwania kwadratowego dla 30%
Uplynelo: 299.646 us
Ilość wywołań funkcji szukającej: 11819
Pomiar wyszukiwania kwadratowego dla 40%
Uplynelo: 317.421 us
Ilość wywołań funkcji szukającej: 12799
Pomiar wyszukiwania kwadratowego dla 50%
Uplynelo: 308.17 us
Ilość wywołań funkcji szukającej: 13904
Pomiar wyszukiwania kwadratowego dla 60%
Uplynelo: 444.892 us
Ilość wywołań funkcji szukającej: 15562
Pomiar wyszukiwania kwadratowego dla 70%
Uplynelo: 388.018 us
Ilość wywołań funkcji szukającej: 17541
Pomiar wyszukiwania kwadratowego dla 80%
Uplynelo: 533.717 us
Ilość wywołań funkcji szukającej: 20932
Pomiar wyszukiwania kwadratowego dla 90%
Uplynelo: 608.259 us
Ilość wywołań funkcji szukającej: 27729
Pomiar wstawiania podwójnego dla 0%
Uplynelo: 197.845 us
Ilość wywołań funkcji wstawiającej: 10026
Pomiar wstawiania podwójnego dla 10%
Uplynelo: 189.227 us
Ilość wywołań funkcji wstawiającej: 11022
Pomiar wstawiania podwójnego dla 20%
Uplynelo: 227.451 us
Ilość wywołań funkcji wstawiającej: 12390
Pomiar wstawiania podwójnego dla 30%
Uplynelo: 278.675 us
Ilość wywołań funkcji wstawiającej: 14124
Pomiar wstawiania podwójnego dla 40%
Uplynelo: 316.518 us
Ilość wywołań funkcji wstawiającej: 16399
Pomiar wstawiania podwójnego dla 50%
Uplynelo: 379.453 us
Ilość wywołań funkcji wstawiającej: 19853
Pomiar wstawiania podwójnego dla 60%
Uplynelo: 541.923 us
Ilość wywołań funkcji wstawiającej: 25401
Pomiar wstawiania podwójnego dla 70%
Uplynelo: 639.561 us
Ilość wywołań funkcji wstawiającej: 34991
Pomiar wstawiania podwójnego dla 80%
Uplynelo: 790.009 us
Ilość wywołań funkcji wstawiającej: 60276
Pomiar wstawiania podwójnego dla 90%
Uplynelo: 1407.91 us
Ilość wywołań funkcji wstawiającej: 223788
Pomiar wyszukiwania podwójnego dla 0%
Uplynelo: 27.314 us
Ilość wywołań funkcji szukającej: 10000
Pomiar wyszukiwania podwójnego dla 10%
Uplynelo: 225.373 us
Ilość wywołań funkcji szukającej: 10431
Pomiar wyszukiwania podwójnego dla 20%
Uplynelo: 303.779 us
Ilość wywołań funkcji szukającej: 10982
Pomiar wyszukiwania podwójnego dla 30%
Uplynelo: 323.16 us
Ilość wywołań funkcji szukającej: 11734
Pomiar wyszukiwania podwójnego dla 40%
Uplynelo: 365.064 us
Ilość wywołań funkcji szukającej: 12625
Pomiar wyszukiwania podwójnego dla 50%
Uplynelo: 332.231 us
Ilość wywołań funkcji szukającej: 13575
Pomiar wyszukiwania podwójnego dla 60%
Uplynelo: 389.842 us
Ilość wywołań funkcji szukającej: 15084
Pomiar wyszukiwania podwójnego dla 70%
Uplynelo: 444.708 us
Ilość wywołań funkcji szukającej: 17007
Pomiar wyszukiwania podwójnego dla 80%
Uplynelo: 483.813 us
Ilość wywołań funkcji szukającej: 20158
Pomiar wyszukiwania podwójnego dla 90%
Uplynelo: 564.271 us
Ilość wywołań funkcji szukającej: 29538