A logaritmikus (bináris) keresés

logo

Ez a cikk egy igen gyakran használt keresési algoritmust mutat be, a lineáris kereséssel ellentétben csak rendezett sorozaton működik, így hatékonysága nyilván jobb annál. Például, ha matematikajegy szerint vannak csoportosítva a diákok, nyilván könnyebb megtalálni azt a tizenkettedikes diákot, aki jeles matematikából, mint ha csak névsor szerint lennének rendezve.

Adott egy rendezett n elemű M sorozat és egy keresett elem (X). El kell dönteni, hogy szerepel-e a keresett elem a sorozatban, s ha igen, akkor megadjuk annak a sorszámát.

A megvalósítás gondolatmenete:

Elsőként a felezőpontban lévő elemet nézzük meg, hogy megegyezik-e a keresett elemmel. Ha nem egyezik meg X a felezőpontban talált elemmel, akkor két eset lehet. Ha nagyobb, akkor a felső részintervallumban, ha kisebb, akkor pedig az alsóban folytatjuk a keresést, míg az intervallum hossza 1 nem lesz.

Algoritmus mondatszerű leírással:

Eljárás logaritmikus_kereses:

also = 1

felso = n

Ciklus

kozep := Egeszrész((also + felso)/ 2)

Ha M[Kozep] < X Akkor

also = kozep + 1

Elágazás vége

Ha M[Kozep] > X Akkor

felso = kozep - 1

Elágazás vége

Mígnem Also > Felso És M[Kozep] = X

Ciklus vége

talalt = (also < = felso)

Ha talalt Akkor

sorszam = kozep

Elágazás vége

Eljárás vége.

Feladat:

Készítsünk programot, amely ismerőseink lakóhelye (városa) alapján megad egy Szekszárdon lakót (lakóhely szerint sorbarendezett listánk van)!

Program baratok:

also = 1

felso = 100

van = False

Ciklus

kozepso = Int((Also + Felso)/2)

Ha Baratok.Hely(kozepso) < "Szekszard" Akkor

also = kozepso + 1

Elágazás vége

Ha Baratok.Hely(kozepso) > "Szekszard" Then

felso = kozepso - 1

Elágazás vége

Mígnem (also > felso) And Baratok.Hely(kozepso) = ”Szekszard”

Ciklus vége

van = (also <= felso)

Ha van Akkor

sorszam = kozepso

Elágazás vége

Ki: ”A keresett szekszárdi barát:”, Baratok.Nev(sorszam))

Program vége.

Házi feladat:

Készítsünk játékot, amelyben egy véletlenszerűen generált 1 és 100 közötti számot kell kitalálni a lehető legkevesebb lépésben. A játék végén azt is közölnünk kell, hány lépésben találták ki a keresett számot.