Tehetséggondozás az informatikában
Az eldöntés, kiválasztás, keresés tétele
Ez a három feladat tulajdonképpen együtt tárgyalható, mert a keresés
tételében az eldöntés és a kiválasztás tétele is benne van.
Eldöntés tétele: Egy n elemű a sorozatban van-e T tulajdonságú elem?
Kiválasztás tétele: Tudjuk, hogy a sorozatban van T tulajdonságú elem, adjuk
meg a sorszámát!
Lineáris keresés
Ha egy sorozatban van T tulajdonságú elem, akkor adjuk meg a sorszámát! Ha
több T tulajdonságú elem van, akkor az egyik sorszámát kell megadni.
Az algoritmus az első T tulajdonságú elemet találja meg, ha van ilyen.
eljárás lineáris_keresés (n, a)
i := 1
ciklus amíg i <= n és a[i] nem T tulajdonságú
i := i+1
ciklus vége
van := (i<=n)
ha (i<=n) akkor
sorsz := i
eljárás vége
A lineáris keresés tételét megvalósíthatjuk egy egyszerűbb ciklussal is,
amely végigvizsgálja a sorozat minden elemét, és az utolsó T tulajdonságú
elem sorszámát adja meg, ha van ilyen. Ezt a változatot azért szokták
sokszor használni, mert nincs benne összetett ciklusfeltétel, bár kevésbé
hatékony (a vizsgálatok száma n az eredeti átlagos n/2 érték helyett).
eljárás keresés (n, a)
van := hamis
ciklus i := 1-től n-ig
ha a[i] T tulajdonságú akkor
van := igaz
sorsz := i
elágazás vége
ciklus vége
eljárás vége
A táblázatkezelő programban a keresést a keresőfüggvények segítségével
végezhetjük el.
HOL.VAN(keresési_érték;tábla; egyezés_típus)
A függvény a keresési érték tömbben elfoglalt relatív pozícióját adja
vissza, amely megadott értékkel megadott módon egyezik. Ha az egyezés_típus
értéke 0, akkor a HOL.VAN az első olyan értéket keresi meg, amely pontosan
egyenlő a keresési_értékkel. Ha az egyezés_típus értéke 1, akkor a HOL.VAN
azt a legnagyobb értéket keresi meg, amely egyenlő vagy kisebb, mint a
keresési_érték. A táblának emelkedő sorrendbe rendezettnek kell lennie. Ha
az egyezés_típus értéke -1, akkor a HOL.VAN azt a legkisebb értéket keresi
meg, amely egyenlő vagy nagyobb, mint a keresési_érték. A táblának csökkenő
sorrendben rendezettnek kell lennie. Ha az egyezés_típus argumentumot nem
adjuk meg, akkor feltételezett értéke 1.
INDEX(tömb;sor_szám;oszlop_szám)
Táblázat (tömb) azon elemének értékét adja vissza, amelyet a sorszám és
oszlopszám mint index meghatároz. Ha a tömb egyetlen sorból vagy oszlopból
áll, akkor a megfelelő sor_szám, illetve oszlop_szám argumentum elhagyható.
FKERES(keresési_érték;tábla; oszlop_szám;tartományban_keres)
A függvény egy tömb bal szélső oszlopában keres egy megadott értéket, és az
így kapott sorból veszi az oszlop_szám argumentummal kijelölt cellát, és
ennek tartalmát adja eredményül. A függvény negyedik paramétere logikai
típusú, amellyel az FKERES függvény pontos vagy közelítő keresését adhatjuk
meg. Ha az argumentum értéke HAMIS, akkor az FKERES pontos egyezést keres,
és ha ilyen nincs, akkor a #HIÁNYZIK hibaértéket adja eredményül. Ha értéke
IGAZ (vagy nem adjuk meg), akkor a visszaadott érték közelítő lehet, azaz ha
pontos egyezést nem talált a függvény, akkor a következő legnagyobb, de a
keresési_érték argumentumnál kisebb értéket adja vissza. Ebben az esetben a
tábla első oszlopában lévő értékeknek növekvő sorrendben kell
elhelyezkedniük, mert különben az FKERES hibás eredményt adhat.
VKERES(keresési_érték;tábla; sor_szám;tartományban_keres)
A megadott tömb felső sorában adott értékű elemet keres, majd a megtalált
elem oszlopából az adott sorban elhelyezkedő értékkel tér vissza. A
függvény harmadik (logikai típusú) paraméterével lehet jelezni, hogy
rendezett-e a keresési vektor. (Lásd FKERES)
A keresett érték sorszámát a HOL.VAN függvény adja vissza. Az
INDEX(…HOL.VAN(…)), FKERES és VKERES függvények a megadott sorszámhoz
tartozó értéket keresik ki a tábla egy másik oszlopából, azaz további
feladatot is megoldanak. Ha nem pontos, hanem közelítő értéket keresünk,
akkor a sorozatnak, amelyben keresünk, rendezettnek kell lennie.