|
Grafy a tabuľky |
Vyhľadávanie v jednosmerne zreťazenom zozname
|
Priemerné počty porovnaní vybraných implementácií |
//sekvencne vyhladavanie zadanej hodnoty "hladany" v JZ zozname od zaznamu "aktualny"
//zoznam musi byt ukonceny nulovym ukazovatelom
//funkcia vracia ukazovatel na najdeny zaznam (v pripade neuspechu vyhladavania vracia 0)
CZaznam_JZ* CZoznam_JZ::najdi_sekv1_zaznam(int hladany, CZaznam_JZ* aktualny){
while (++p_a_porovnani_ && aktualny) {
if (++p_b_porovnani_ && aktualny->hodnota()==hladany) return aktualny;
else {aktualny=aktualny->dalsi(); ++p_posunuti_;}
}
return 0;
} |
Počet porovnaní, cyklov a času trvania algoritmu pre úspešné vyhľadávanie. |
počet záznamov v zozname |
p_a_porovnani_ |
p_b_porovnani_ |
p_posunuti_ |
čas |
10 |
5,500 |
5,500 |
4,500 |
0,4733 |
100 |
50,50 |
50,50 |
49,50 |
4,240 |
1.000 |
500,5 |
500,5 |
499,5 |
40,45 |
10.000 |
5000,5 |
5000,5 |
4999,5 |
402,5 |
|
Priemerný počet posunutí v zozname je približne n/2 a keďže v každom cykle urobí algoritmus dve porovnania, je približný počet porovnaní n. |
|
Počet porovnaní, cyklov a času trvania algoritmu pre neúspešné vyhľadávanie s p=0,9. |
počet záznamov v zozname |
p_a_porovnani_ |
p_b_porovnani_ |
p_posunuti_ |
čas |
10 |
9,300 |
8,500 |
8,300 |
0,7327 |
100 |
98,08 |
97,12 |
97,08 |
8,030 |
1.000 |
950,1 |
949,2 |
949,1 |
76,21 |
10.000 |
9543,4 |
9542,5 |
9542,4 |
780,1 |
|
Pre zväčša neúspešné vyhľadávanie je priemerný počet posunutí v zozname približne rovný dĺžke zoznamu, vždy však menší. Počet porovnaní je teda približne 2*n. |
|
|
Závislost dĺžky času trvania algoritmu od veľkosti vstupného pola |
Časová zložitosť tohto algoritmu je lineárna, teda pre 10-násobné zväčšenie veľkosti zoznamu, vzrastie aj čas prehľadávania približne 10-násobne. Úspešné vyhľadávanie je rýchlejšie preto, lebo v priemernom prípade stačí prejsť pri takomto vyhľadávaní polovicu zoznamu, zatiaľ čo pri neúspešnom vyhľadávaní treba prejsť celý nezoradený zoznam. |
|
|
10 |
100 |
1.000 |
10.000 |
úspešné vyhľadávanie |
0,4733 |
4,240 |
40,45 |
402,5 |
neúspešné vyhľadávanie s p=0,9 |
0,7327 |
8,030 |
76,21 |
780,1 |
|
|
|
Poznámka: Algoritmy boli testované na počítači s procesorom AMD Athlon(tm) XP 1700+ a s 256 MB operačnou pamäťou pod operačným systémom Windows XP. Všetky časy uvedené v tabuľke sú v mikrosekundách. |