//najdenie zadanej hodnoty "hodnota" v rozptylovej tabulke "tabulka"
//s otvorenym rozptylovanim s poctom riadkov "p_riadkov"
//funkcia vracia index polozky v ktorej bola hodnota najdena (v pripade neuspechu vracia -1)
int najdi_OR(Criadok_OR* tabulka, int p_riadkov, int hodnota, int sposob) {
int pokus=0;
while (pokus < p_riadkov) {
int riadok = funkcia_OR(p_riadkov, hodnota, pokus, sposob);
if (tabulka[riadok].prazdna()) return -1;
else if (tabulka[riadok].hodnota()==hodnota) return riadok;
else pokus++;
}
return -1;
} |
//vlozenie zadanej hodnoty "hodnota" do rozptylovej tabulky "tabulka"
//s otvorenym rozptylovanim s poctom riadkov "p_riadkov"
//funkcia vracia index polozky do ktorej bola hodnota vlozena (v pripade neuspechu vracia -1)
int vloz_OR(Criadok_OR* tabulka, int p_riadkov, int hodnota, int sposob) {
int pokus=0;
while (pokus < p_riadkov) {
int riadok = funkcia_OR(p_riadkov, hodnota, pokus, sposob);
if (tabulka[riadok].prazdna()) {
tabulka[riadok].nastav_hodnotu(hodnota);
tabulka[riadok].nastav_priznak(false);
return riadok;
}
pokus++;
}
return -1;
} |
//volanie funkcie na zaklade zadaneho sposobu riesenia kolizii (uchovavaneho v clenskej
//premennej SRK_), ktora vypocita na zaklade zadanej vkladanej hodnoty "hodnota" a
//poctu predchadzajucich neuspesnych pokusov "pokus", kam bude zadana hodnota vlozena
//zadana hodnota bude vlozena do tabulky "tabulka" s poctom riadkov "p_riadkov"
//funkcia vracia index polozky, do ktorej ma byt zadana hodnota ulozena
int funkcia_OR(int p_riadkov, int hodnota, int pokus, int sposob) {
switch (sposob) {
case 1 : return linear_probing(hodnota, pokus, p_riadkov);
case 2 : return displaced_linear_probing(hodnota, pokus, p_riadkov);
case 3 : return secondary_clustering(hodnota, pokus, p_riadkov);
case 4 : return quadratic_residue(hodnota, pokus, p_riadkov);
case 5 : return double_hashing(hodnota, pokus, p_riadkov);
}
} |
//vypocitanie polozky do ktorej bude zadana hodnota "hodnota"
//vlozena metodou displaced linear probing vzhladom na predchadzajuce
//mnozstvo neuspesnych pokusov "pokus" vlozenia tohto prvku
//a pocet riadkov "p_riadkov" v rozptylovej tabulke
//funkcia vracia index polozky do ktorej ma byt zadana hodnota vlozena
int displaced_linear_probing(int hodnota, int pokus, int p_riadkov) {
const int odskok=2;
int riadok = (hodnota + odskok*pokus) % p_riadkov;
return riadok;
} |