Compare commits
2 Commits
7d7a2b73d9
...
ac9feec8dd
| Author | SHA1 | Date | |
|---|---|---|---|
| ac9feec8dd | |||
| 6da16b20cf |
@@ -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
198
projekt 2/wyniki
Normal 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
|
||||
Reference in New Issue
Block a user