Algoritmy pre rozptyľové tabuľky so zreťazeným rozptyľovaním

Vyhľadávanie pri metóde coalesced chaining

Popis

Pri tejto metóde je vkladaný prvok vždy vkladaný do tabuľky. Ak ale nemôže byť vložený do položky, ktorú mu priradila rozptylová funkcia, sleduje algoritmus zreťazenie prvkov začínajúce v prislúchajúcej položke a až sa dostane na koniec zreťazenia, nájde voľné miesto v tabuľke do ktorého prvok vloží a do poslednej položky zreťazenia zapíše miesto, kde bol tento prvok vložený. Potom si ešte na miesto, ktoré je určené pre index nasledujúceho prvku poznačí, že vkladaný prvok je posledným v zreťazení.

Vstupy algoritmu

Vstupmi sú vyhľadávaná hodnota a rozptylová tabuľka s určeným počtom riadkov.

Princíp činnosti

Pri vyhľadávaní algoritmus skontroluje vypočítanú pozíciu, kde by sa mal prvok nachádzať. Ak tam uložený prvok nie je, sleduje vzniknutú reťaz podľa zapísaných indexov nasledujúceho prvku. Ak pri prehľadávaní nenájde hľadaný prvok a index nasledujúceho prvku indikuje koniec zreťazenia prvkov, potom sa prvok v tabuľke nenachádza. Ak pri prehľadávaní reťaze prvkov nájde hľadaný prvok, algoritmus sa končí úspechom. Bližšie o metóde coalesced chaining sa môžeme dozvedieť v [4].

Výstupy algoritmu

Výstupom je číslo riadku, v ktorom sa nachádzala hľadaná hodnota. Ak sa hľadaná hodnota v tabuľke nenachádzala, výstupom môže byť napríklad číslo -1 (riadok s poradovým číslom -1 sa v tabuľke určite nenachádza).

Vývojový diagram

Implementácia

//najdenie zadanej hodnoty "hodnota" v rozptylovej tabulke "tabulka"
//s poctom riadkov "p_riadkov" so zretazenym rozptylovanim metodou coalesced chaining
//funkcia vracia index polozky v ktorej bola hodnota najdena (v pripade neuspechu vracia -1)
int najdi_ZR_CCH(CRiadok_ZR_CCH* tabulka, int p_riadkov, int hodnota) {
	int riadok = hodnota % p_riadkov;
	if (tabulka[riadok].prazdna()) return -1;
	else if (tabulka[riadok].hodnota()==hodnota) return riadok;
	
	while ((riadok = tabulka[riadok].nasl_p())!=-1) {
		if (tabulka[riadok].hodnota()==hodnota) return riadok;
	}
	return -1;
}

Vizualizácie

Časová zložitosť

Časová zložitosť sa nedá presne určiť a závisí od hodnôt, ktoré budú do tabuľky vkladané. Efektivita metódy bude určená na základe nameraných hodnôt.