Tusjak óra (2024. 12. 12.)

This commit is contained in:
Tóth Ádám 2024-12-12 09:13:53 +01:00
parent 7dfc64af74
commit 3a9c0ff7c4

View File

@ -0,0 +1,20 @@
Bináris keresés
A bináris - más néven logaritmikus vagy felező módszer - mivel n elem esetén log(n) futási idővel rendelkezik. A bináris keresés egy erősen optimalizált keresési eljárás, amely csak rendezett adatsoron alkalmazható. Például, amikor egy nyomtatott szótárban keresünk egy szót vagy jelenléti íven keressük a nevünket. A keresett értéket egy mintaadattal összehasonlítjuk és az eredménytől függően - amennyire lehet - egy nagy részt kizárunk a tartományból.
A módszer külön implementációt C# esetén nem igényel, mivel beépítetten az Array osztály és a List osztály is tartalmaz bináris keresést megvalósító metódust:
int ondex = Array.BinarySearch()
Buborékrendezés
Az algoritmus a nevét onnan kapta, hogy hasonlóan ahhoz, ahogy, a pezsgőpohárban szállnak felfelé a buboréknak, a rendezés során is minden egyes menetben a fennmaradó elemek közül a legnagyobbat "áramoltatjuk fel" a tömbszelet végére, tetejére.
A rendezés során a tömb a fennmaradó részén végighaladva az egymás utáni szomszédos elemeket összehasonlítjuk, és ha szükséges, megcseréljük őket, hogy közülük mindig a nagyobb helyezkedjen el feljebb. Ezt a műveletet aztán a tömbön feljebb lépve addig ismételjük, amíg a fennmaradó rész végéhez nem érünk. A műveletsor végén a rendezetlen rész tetejére mindig a legnagyobb érték kerül majd fel, amelyet a következő menetben már nem veszünk figyelembe. A ciklust egészen addig ismételjük, amíg meg nem találjuk a kívánt elemet.
CIKLUS i = 6-tól 1-ig
CIKLUS j = 0-tól i-1-ig
HA a[j] > a[j+1] AKKOR
csere a[j] a[j+1]
Az algoritmus futási ideje javítható, ha megfigyeljük, hogy a külső ciklusnak csak akkor érdemes tovább futnia, ha a belső cuklusban volt csere. Erre bevezethetunk egy logikai változót.
A javított algoritmus futási ideje legjobb esetben lináris lesz, legrosszabb esetben pedig négyzetes.