A minimumkiválasztás tétele segítségével egy adatsorozat legkisebb értékű elemét határozzuk meg.
A feladat lényege:
Mikor használjuk? Például:
Adott az alábbi számsorozat:
12, 5, 18, 3, 9, 7
Határozzuk meg a legkisebb számot!
A feldolgozás lépései:
Először feltételezzük, hogy a lista első eleme a legkisebb: => minimum = 12
Ezután sorban összehasonlítjuk a többi elemmel.
| Vizsgált elem | Aktuális minimum | Összehasonlítás | Új minimum |
|---|---|---|---|
| 12 | 12 | Kezdőérték | 12 |
| 5 | 12 | 5 < 12 | 5 |
| 18 | 5 | 18 > 5 | 5 |
| 3 | 5 | 3 < 5 | 3 |
| 9 | 3 | 9 > 3 | 3 |
| 7 | 3 | 7 > 3 | 3 |
Az eredmény: 3
A minimumkiválasztásnál az egyik legfontosabb szabály, hogy a minimumváltozó kezdőértékének a lista első elemét választjuk.
Mindezt azért tesszük, mert nem tudhatjuk előre, hogy milyen értékek találhatók a listában. Ha például a minimumot 0-ra állítanánk, akkor egy kizárólag pozitív számokat tartalmazó listánál hibás eredményt kapnánk.
Pszeudokód:
Minimumkiválasztás:
minimum := tömb[0]
CIKLUS i = 1-től N-1-ig
HA tömb[i] < minimum AKKOR
minimum := tömb[i]
ELÁGAZÁS VÉGE
CIKLUS VÉGE
KI: minimum
Minimumkiválasztás vége
szamok = [12, 5, 18, 3, 9, 7]
minimum = szamok[0]
for szam in szamok:
if szam < minimum:
minimum = szam
print("A legkisebb szám:", minimum)
Eredmény:
A legkisebb szám: 3
minimum változóba eltároljuk a lista első elemét.for ciklussal végigmegyünk a lista elemein.Pythonban létezik egy beépített függvény a legkisebb érték meghatározására. => min()
A maximumkeresés segítségével egy adatsorozat legnagyobb értékű elemét határozzuk meg.
Nagyon hasonlít a minimumkiválasztáshoz, de itt nem a legkisebb, hanem a legnagyobb értéket keressük.
A feladat lényege:
Mikor használjuk? Például:
Adott az alábbi számsorozat:
12, 5, 18, 3, 9, 25, 7
Határozzuk meg a legnagyobb számot!
Kezdetben: maximum = 12
Ezután megvizsgáljuk a többi elemet.
| Vizsgált elem | Aktuális maximum | Összehasonlítás | Új maximum |
|---|---|---|---|
| 12 | 12 | Kezdőérték | 12 |
| 5 | 12 | 5 < 12 | 12 |
| 18 | 12 | 18 > 12 | 18 |
| 3 | 18 | 3 < 18 | 18 |
| 9 | 18 | 9 < 18 | 18 |
| 25 | 18 | 25 > 18 | 25 |
| 7 | 25 | 7 < 25 | 25 |
Az eredmény: 25
Pszeudokód:
Maximumkeresés:
maximum := tömb[0]
CIKLUS i = 1-től N-1-ig
HA tömb[i] > maximum AKKOR
maximum := tömb[i]
ELÁGAZÁS VÉGE
CIKLUS VÉGE
KI: maximum
Maximumkeresés vége
szamok = [12, 5, 18, 3, 9, 25, 7]
maximum = szamok[0]
for szam in szamok:
if szam > maximum:
maximum = szam
print("A legnagyobb szám:", maximum)
Eredmény:
A legnagyobb szám: 25
Pythonban a max() függvény segítségével is meghatározhatjuk a legnagyobb értéket.
A két algoritmus akár egyetlen ciklusban is megvalósítható.
Feladat: Határozzuk meg egy lista legkisebb és legnagyobb elemét!
szamok = [12, 5, 18, 3, 9, 25, 7]
minimum = szamok[0]
maximum = szamok[0]
for szam in szamok:
if szam < minimum:
minimum = szam
if szam > maximum:
maximum = szam
print("Minimum:", minimum)
print("Maximum:", maximum)
Eredmény:
Minimum: 3
Maximum: 25
A kiválasztás tétele segítségével megkeresünk egy olyan elemet egy adatsorozatban, amely megfelel egy adott feltételnek, és meghatározzuk annak helyét, vagyis indexét.
A legfontosabb különbség az eldöntés és a kiválasztás között:
Mikor használjuk? Például:
Adott a következő lista:
12, 5, 18, 3, 9, 25, 7
Feladat: Keressük meg, hogy hányadik helyen található a 18-as szám!
A lista indexei:
| Index | Érték |
|---|---|
| 0 | 12 |
| 1 | 5 |
| 2 | 18 |
| 3 | 3 |
| 4 | 9 |
| 5 | 25 |
| 6 | 7 |
A 18-as szám indexe: 2
📌 Fontos: A programozásban a lista indexelése általában 0-tól kezdődik, ezért a 18-as szám a 2-es indexen található, de emberi megfogalmazásban a harmadik elem.
A kiválasztásnál egy indexváltozóval követjük, hogy éppen melyik elemet vizsgáljuk.
Pszeudokód:
Kiválasztás:
i := 0
CIKLUS AMÍG tömb[i] nem felel meg a feltételnek
i := i + 1
CIKLUS VÉGE
KI: i
Kiválasztás vége
A ciklus addig fut, amíg meg nem találjuk a megfelelő elemet.
szamok = [12, 5, 18, 3, 9, 25, 7]
i = 0
while szamok[i] != 18:
i += 1
print("A keresett szám indexe:", i)
print("A keresett szám helye:", i + 1)
Eredmény:
A keresett szám indexe: 2
A keresett szám helye: 3
i változót 0-ra állítjuk.A kiválasztásnál nem feltétlenül tudjuk előre, hogy hányadik helyen található a keresett elem.
Ezért célszerű olyan ciklust használni, amely addig ismétlődik, amíg a keresett feltétel nem teljesül.
A keresés tétele segítségével megvizsgáljuk, hogy egy adatsorozatban megtalálható-e egy adott feltételnek megfelelő elem.
Ha megtaláljuk, meghatározzuk annak helyét is.
Ha nem találjuk meg, akkor ezt is jelezzük.
A keresés tehát az eldöntés és a kiválasztás egyfajta kombinációja.
A keresés eredménye:
Mikor használjuk? Például:
Adott a következő lista:
12, 5, 18, 3, 9, 25, 7
Feladat: Keressük meg a 9-es szám helyét!
A lista elemeit sorban vizsgáljuk:
| Index | Aktuális elem | Megfelel a feltételnek? |
|---|---|---|
| 0 | 12 | Nem |
| 1 | 5 | Nem |
| 2 | 18 | Nem |
| 3 | 3 | Nem |
| 4 | 9 | Igen |
A 9-es szám indexe: 4
Mi történik, ha a keresett szám például 100!
A program végigvizsgálja a listát, de nem talál megfelelő elemet.
Ebben az esetben azt kell jeleznie, hogy a szám nem szerepel a listában.
A keresésnél szükségünk van:
Pszeudokód:
Keresés:
i := 0
van := HAMIS
CIKLUS AMÍG i < N ÉS van = HAMIS
HA tömb[i] megfelel a feltételnek AKKOR
van := IGAZ
KÜLÖNBEN
i := i + 1
ELÁGAZÁS VÉGE
CIKLUS VÉGE
HA van = IGAZ AKKOR
KI: i
KÜLÖNBEN
KI: NINCS TALÁLAT
ELÁGAZÁS VÉGE
Keresés vége
szamok = [12, 5, 18, 3, 9, 25, 7]
keresett = 9
i = 0
van = False
while i < len(szamok) and not van:
if szamok[i] == keresett:
van = True
else:
i += 1
if van:
print("A keresett szám indexe:", i)
print("A keresett szám helye:", i + 1)
else:
print("A keresett szám nem szerepel a listában.")
Eredmény:
A keresett szám indexe: 4
A keresett szám helye: 5
Próbáljuk ki a programot a 100-as számmal!
szamok = [12, 5, 18, 3, 9, 25, 7]
keresett = 100
i = 0
van = False
while i < len(szamok) and not van:
if szamok[i] == keresett:
van = True
else:
i += 1
if van:
print("A keresett szám indexe:", i)
else:
print("Nincs ilyen szám a listában.")
Eredmény:
Nincs ilyen szám a listában.
Pythonban a lista index() metódusa segítségével is megkereshetjük egy elem helyét.
szamok = [12, 5, 18, 3, 9, 25, 7]
keresett = 9
if keresett in szamok:
index = szamok.index(keresett)
print("A keresett szám indexe:", index)
else:
print("Nincs ilyen szám a listában.")
Fontos:
in operátor ellenőrzi, hogy az elem szerepel-e a listában.index() metódus visszaadja az első előfordulás indexét.index() kivételt okoz. Ezért ellenőrzés nélkül nem célszerű meghívni.A minimumkiválasztás, maximumkeresés, kiválasztás és keresés elsőre nagyon hasonlónak tűnhet, de más-más feladatot oldanak meg.
| Tétel | Feladata | Eredménye |
|---|---|---|
| Minimumkiválasztás | Legkisebb érték meghatározása | Minimumérték |
| Maximumkeresés | Legnagyobb érték meghatározása | Maximumérték |
| Kiválasztás | Egy biztosan létező, megfelelő elem megkeresése | Index |
| Keresés | Egy esetlegesen létező, megfelelő elem megkeresése | Találat és index vagy nincs találat |
| Feladatban szereplő kérdés | Alkalmazandó tétel |
|---|---|
| Melyik a legolcsóbb termék? | Minimumkiválasztás |
| Melyik a legmagasabb pontszám? | Maximumkeresés |
| Hol található az első 100 pontos eredmény, ha biztosan van ilyen? | Kiválasztás |
| Szerepel-e a keresett termék, és ha igen, hol? | Keresés |
| Melyik a leghidegebb nap? | Minimumkiválasztás |
| Melyik napon volt a legnagyobb bevétel? | Maximumkeresés |
A kiválasztás és a keresés közötti legfontosabb különbség:
minimum = lista[0]
for elem in lista:
if elem < minimum:
minimum = elem
maximum = lista[0]
for elem in lista:
if elem > maximum:
maximum = elem
i = 0
while lista[i] != keresett:
i += 1
Feltétel: biztosan létezik megfelelő elem.
i = 0
van = False
while i < len(lista) and not van:
if lista[i] == keresett:
van = True
else:
i += 1
if van:
print("Találat:", i)
else:
print("Nincs találat.")
| Hiba | Miért probléma? | Helyes megoldás |
|---|---|---|
| A minimum kezdőértéke 0. | Pozitív számoknál hibás lehet. | minimum = lista[0] |
| A maximum kezdőértéke 0. | Negatív számoknál hibás lehet. | maximum = lista[0] |
Minimumkeresésnél > szerepel < helyett. |
Nem a kisebb elemet választjuk. | if elem < minimum |
Maximumkeresésnél < szerepel > helyett. |
Nem a nagyobb elemet választjuk. | if elem > maximum |
| Kiválasztásnál nincs létezési garancia. | Indexelési hiba keletkezhet. | Biztosítani kell, hogy legyen találat. |
| Keresésnél nincs indexhatár-ellenőrzés. | A lista végén indexelési hiba keletkezhet. | i < len(lista) |
| Keresésnél elmarad az index növelése. | Végtelen ciklus keletkezhet. | i += 1 |
| Az indexet és a sorszámot összekeverjük. | Egy hellyel eltérő eredményt kapunk. | Index: i, sorszám: i + 1 |
| Tétel | Mit csinál? | Kezdőérték | Eredmény |
|---|---|---|---|
| Minimumkiválasztás | Megkeresi a legkisebb elemet | Első elem | Minimum |
| Maximumkeresés | Megkeresi a legnagyobb elemet | Első elem | Maximum |
| Kiválasztás | Megkeresi a biztosan létező megfelelő elemet | i = 0 |
Index |
| Keresés | Megkeresi az esetlegesen létező megfelelő elemet | i = 0, van = False |
Index vagy nincs találat |