You are on page 1of 12

Kereső algoritmusok

Kósa Márk
Pánovics János

2. gyakorlat
Kereső algoritmusok
Teljes, lineáris és bináris keresés

Adatszerkezetek és algoritmusok gyakorlat Keresések

2010. február 15–17. Teljes keresés


Lineáris keresés
Bináris keresés

Kósa Márk és Pánovics János


Debreceni Egyetem
Informatikai Kar
2.1
Kereső algoritmusok
Keresések
Kósa Márk
Pánovics János

A keresőalgoritmusok célja lehet


• annak megállapítása, hogy egy adott értékű elem
szerepel-e az adatszerkezetben (logikai típusú eredmény);
• annak megállapítása, hogy egy adott értékű elem
hányszor szerepel az adatszerkezetben (numerikus típusú
Keresések
eredmény); Teljes keresés

• annak megállapítása, hogy egy adott értékű elem hol Lineáris keresés
Bináris keresés

található az adatszerkezetben
• kereshetjük egy adott értékű elem első (második, . . . ,
n-edik) előfordulását (numerikus vagy mutató típusú
eredmény),
• kereshetjük egy adott értékű elem összes előfordulását
(numerikus vagy mutató típusú értékek gyűjteménye).
Vannak olyan keresőalgoritmusok, amelyeknél
megszorításokat kell tennünk az adatszerkezet elemeinek
rendezettségére és az adatszerkezet reprezentációjára
(tárolási módjára) vonatkozóan.

2.2
Kereső algoritmusok
Teljes keresés
Kósa Márk
Pánovics János

Nincs megszorítás sem az adatszerkezet elemeinek


rendezettségére, sem az adatszerkezet reprezentációjára
vonatkozóan.
Adott értékű elem első előfordulásának keresése iteratív módon

1 Ha az adatszerkezet minden elemét megvizsgáltuk, akkor Keresések

az algoritmus véget ér. Ilyenkor nincs az Teljes keresés


Lineáris keresés

adatszerkezetben olyan elem, amelynek az értéke Bináris keresés

megegyezne a keresett értékkel.


2 Tekintsük az adatszerkezet soron következő elemét
(legelső alkalommal az első elemet).
3 Ha a kiválasztott elem értéke megegyezik a keresett
értékkel, akkor az algoritmus véget ér. Ebben az esetben
megtaláltuk a keresett érték első előfordulását az
adatszerkezetben.
4 Folytassuk az algoritmust az 1. lépéssel.

2.3
Kereső algoritmusok
Teljes keresés
Kósa Márk
Pánovics János

Adott értékű elem első előfordulásának keresése rekurzív módon

1 Ha az adatszerkezet üres (az elemeinek a száma nulla),


akkor az algoritmus véget ér. Ilyenkor nincs az
adatszerkezetben olyan elem, amelynek az értéke Keresések
Teljes keresés
megegyezne a keresett értékkel. Lineáris keresés
Bináris keresés

2 Ha az adatszerkezet első elemének értéke megegyezik a


keresett értékkel, akkor az algoritmus véget ér. Ebben az
esetben megtaláltuk a keresett érték első előfordulását az
adatszerkezetben.
3 Tekintsük azt az adatszerkezetet, amelyet a most vizsgált
adatszerkezet első elemének elhagyásával kapunk, és
hajtsuk végre rajta ugyanezt az algoritmust.

2.4
Kereső algoritmusok
Teljes keresés strázsa alkalmazásával
Kósa Márk
Pánovics János

Folytonos reprezentáció esetén létezik egy javítása a teljes


keresés iteratív változatának. Egyetlen követelmény, hogy az
Keresések
adatszerkezet elemeihez szükséges tárterületen túl, az Teljes keresés

adatszerkezet utolsó elemét követően még egy elem Lineáris keresés


Bináris keresés
tárolásához elegendő tárhely álljon rendelkezésünkre.

A javítás lényege, hogy a kereső ciklus minden iterációjában


megspórolhatjuk az adatszerkezet végének ellenőrzését végző
feltétel kiértékelését.

2.5
Kereső algoritmusok
Teljes keresés strázsa alkalmazásával
Kósa Márk
Pánovics János

Adott értékű elem első előfordulásának keresése strázsa


alkalmazásával

1 Közvetlenül az adatszerkezet utolsó eleme utáni tárhelyen


helyezzük el a keresett értéket.
2 Tekintsük a soron következő tárhelyen található értéket Keresések
(legelső alkalommal az első tárhelyen lévőt). Teljes keresés
Lineáris keresés

3 Ha a kiválasztott tárhelyen lévő érték nem egyezik meg a Bináris keresés

keresett értékkel, akkor folytassuk az algoritmust a 2.


lépéssel.
4 Ha a kiválasztott tárhely az adatszerkezet utolsó eleme
után helyezkedik el, akkor nincs az adatszerkezetben
olyan elem, amelynek az értéke megegyezne a keresett
értékkel. Ezzel az algoritmus véget ér.
5 Egyébként megtaláltuk a keresett érték első előfordulását
az adatszerkezetben. Ezzel az algoritmus szintén véget
ér.

2.6
Kereső algoritmusok
Lineáris keresés
Kósa Márk
Pánovics János

Az adatszerkezet reprezentációja (tárolási módja) tetszőleges


lehet, de az adatszerkezetnek rendezettnek kell lennie. Keresések
Teljes keresés
Lineáris keresés
A továbbiakban a lineáris keresést végző algoritmusok Bináris keresés

megadásánál feltételezzük, hogy az adatszerkezetnek –


amelyben a keresést végezzük – az elemei nemcsökkenő
módon sorba vannak rendezve. E feltételezés szerint az
adatszerkezet egy adott értéket többször is tartalmazhat.

2.7
Kereső algoritmusok
Lineáris keresés
Kósa Márk
Pánovics János

Adott értékű elem első előfordulásának keresése iteratív módon

1 Ha az adatszerkezet minden elemét megvizsgáltuk, akkor


az algoritmus véget ér. Ilyenkor nincs az
adatszerkezetben olyan elem, amelynek az értéke
megegyezne a keresett értékkel.
Keresések
2 Tekintsük az adatszerkezet soron következő elemét Teljes keresés
Lineáris keresés
(legelső alkalommal az első elemet). Bináris keresés

3 Ha a kiválasztott elem értéke megegyezik a keresett


értékkel, akkor az algoritmus véget ér. Ebben az esetben
megtaláltuk a keresett érték első előfordulását az
adatszerkezetben.
4 Ha a kiválasztott elem értéke nagyobb a keresett értéknél,
akkor az algoritmus véget ér. Ilyenkor nincs az
adatszerkezetben olyan elem, amelynek az értéke
megegyezne a keresett értékkel.
5 Folytassuk az algoritmust az 1. lépéssel.

2.8
Kereső algoritmusok
Lineáris keresés
Kósa Márk
Pánovics János

Adott értékű elem első előfordulásának keresése rekurzív módon

1 Ha az adatszerkezet üres (az elemeinek a száma nulla),


akkor az algoritmus véget ér. Ilyenkor nincs az
adatszerkezetben olyan elem, amelynek az értéke
megegyezne a keresett értékkel.
Keresések
2 Ha az adatszerkezet első elemének értéke megegyezik a Teljes keresés
Lineáris keresés
keresett értékkel, akkor az algoritmus véget ér. Ebben az Bináris keresés

esetben megtaláltuk a keresett érték első előfordulását az


adatszerkezetben.
3 Ha az adatszerkezet első elemének értéke nagyobb a
keresett értéknél, akkor az algoritmus véget ér. Ilyenkor
nincs az adatszerkezetben olyan elem, amelynek az
értéke megegyezne a keresett értékkel.
4 Tekintsük azt az adatszerkezetet, amelyet a most vizsgált
adatszerkezet első elemének elhagyásával kapunk, és
hajtsuk végre rajta ugyanezt az algoritmust.

2.9
Kereső algoritmusok
Bináris keresés
Kósa Márk
Pánovics János

Az adatszerkezet rendezett, reprezentációja (tárolási módja)


folytonos. A folytonos tárolási módból adódóan egy adatelem
helye közvetlenül meghatározható az adatszerkezet
memóriabeli kezdőcímének és az adatelemek méretének
Keresések
függvényében. Teljes keresés
Lineáris keresés
Bináris keresés
A továbbiakban a bináris keresést végző algoritmusok
megadásánál feltételezzük, hogy az adatszerkezetnek –
amelyben a keresést végezzük – az elemei nemcsökkenő
módon sorba vannak rendezve. E feltételezés szerint az
adatszerkezet egy adott értéket többször is tartalmazhat.

Feltételezzük továbbá azt is, hogy az adatszerkezet elemeinek


száma előre ismert.

2.10
Kereső algoritmusok
Bináris keresés
Kósa Márk
Pánovics János
Adott értékű elem keresése iteratív módon

1 alsó ← az adatszerkezet első elemének indexe


2 felső ← az adatszerkezet utolsó elemének indexe
3 Ha alsó > felső, akkor az algoritmus véget ér. Ilyenkor
nincs az adatszerkezetben olyan elem, amelynek az
értéke megegyezne a keresett értékkel. Keresések
h i Teljes keresés

4 k ← alsó+fels
2
ő Lineáris keresés
Bináris keresés

5 Ha az adatszerkezet k -adik elemének értéke megegyezik


a keresett értékkel, akkor az algoritmus véget ér. Ebben
az esetben megtaláltuk a keresett értéket az
adatszerkezetben.
6 Ha az adatszerkezet k -adik elemének értéke kisebb a
keresett értéknél, akkor alsó ← (k + 1), és folytassuk az
algoritmust a 3. lépéssel.
7 Ha az adatszerkezet k -adik elemének értéke nagyobb a
keresett értéknél, akkor felső ← (k − 1), és folytassuk az
algoritmust a 3. lépéssel.
2.11
Kereső algoritmusok
Bináris keresés
Kósa Márk
Pánovics János
Adott értékű elem keresése rekurzív módon

1 Ha az adatszerkezet üres (az elemeinek a száma nulla), akkor


az algoritmus véget ér. Ilyenkor nincs az adatszerkezetben olyan
elem, amelynek az értéke megegyezne a keresett értékkel.
2 alsó ← az adatszerkezet első elemének indexe
3 felső ← az adatszerkezet utolsó elemének indexe Keresések
Teljes keresés

k ← alsó+felső
 
4 2
Lineáris keresés
Bináris keresés

5 Ha az adatszerkezet k -adik elemének értéke megegyezik a


keresett értékkel, akkor az algoritmus véget ér. Ebben az
esetben megtaláltuk a keresett értéket az adatszerkezetben.
6 Ha az adatszerkezet k -adik elemének értéke kisebb a keresett
értéknél, akkor tekintsük a (k + 1) és a felső indexekkel határolt
részét az adatszerkezetnek, és hajtsuk végre ugyanezt az
algoritmust erre a részre.
7 Ha az adatszerkezet k -adik elemének értéke nagyobb a keresett
értéknél, akkor tekintsük az alsó és a (k − 1) indexekkel határolt
részét az adatszerkezetnek, és hajtsuk végre ugyanezt az
algoritmust erre a részre.
2.12

You might also like