Algoritmus
Az algoritmus egy lépésről lépésre történő eljárás logikai és matematikai problémák megoldására.
A recept jó példa az algoritmusra, mert lépésről lépésre megmondja, hogy mit kell tenni. Bemeneteket (hozzávalókat) vesz fel, és kimenetet (az elkészült ételt) állít elő.
Az "algoritmus" és az "algorizmus" szavak egy perzsa matematikus, Al-Khwārizmī (perzsa: خوارزمی, 780-850 körül) nevéből származnak.
Nem hivatalosan egy algoritmust "lépések listájának" is nevezhetünk. Az algoritmusokat meg lehet írni hétköznapi nyelven, és lehet, hogy az embernek csak erre van szüksége.
A számítástechnikában az algoritmus olyan műveletek pontos listája, amelyeket egy Turing-gép elvégezhet. A számítástechnika céljaira az algoritmusokat pszeudokódban, folyamatábrákban vagy programozási nyelveken írják le. .
Algoritmusok összehasonlítása
Egy probléma megoldására általában többféle megoldás létezik. Sokféle recept létezhet egy bizonyos étel elkészítésére, amely másképp néz ki, de végül ugyanolyan ízű lesz. Ugyanez igaz az algoritmusokra is. Azonban ezek közül néhány módszer jobb lesz, mint mások. Ha egy recepthez sok bonyolult hozzávalóra van szükség, amelyekkel nem rendelkezel, akkor nem olyan jó, mint egy egyszerű recept. Amikor az algoritmusokat mint a problémák megoldásának módját vizsgáljuk, gyakran azt szeretnénk tudni, hogy mennyi idő alatt oldaná meg a számítógép a problémát egy adott algoritmus segítségével. Amikor algoritmusokat írunk, azt szeretnénk, ha az algoritmusunk a lehető legkevesebb időt venné igénybe, hogy a lehető leggyorsabban megoldhassuk a problémánkat.
A főzésben egyes recepteket nehezebb elkészíteni, mint másokat, mert több időt vesz igénybe a befejezésük, vagy mert több dolgot kell szem előtt tartani. Ugyanez a helyzet az algoritmusok esetében is, és az algoritmusok akkor jobbak, ha a számítógép számára könnyebben kivitelezhetőek. Azt, ami egy algoritmus nehézségét méri, komplexitásnak nevezzük. Amikor azt kérdezzük, hogy mennyire bonyolult egy algoritmus, gyakran azt szeretnénk tudni, hogy mennyi időbe telik egy számítógépnek megoldani azt a problémát, amit meg akarunk oldani vele.
Rendezés
Ez egy példa egy algoritmusra, amely a színekkel ellátott kártyákat azonos színű kupacokba rendezi:
- Vegye fel az összes kártyát.
- Válasszon ki egy kártyát a kezéből, és nézze meg a kártya színét.
- Ha már van egy halom ilyen színű kártya, akkor ezt a kártyát tegye arra a halomra.
- Ha nincs ilyen színű kártyakupac, készítsen egy új kupacot csak ebből a színből.
- Ha még mindig van kártya a kezedben, térj vissza a második lépésre.
- Ha nincs még kártya a kezedben, akkor a kártyákat kiválogatod. Végeztél.
Rendezés számok szerint
Ezek példák olyan algoritmusokra, amelyek egy sok különböző számot tartalmazó kártyakupac rendezésére szolgálnak úgy, hogy a számok sorrendben legyenek.
A játékosok egy halom kártyával kezdenek, amelyeket még nem válogattak szét.
Első algoritmus
Ez az algoritmus egyszerre egy-egy kártyalapon megy végig. Ezt a kártyát összehasonlítja a következő kártyával a veremben. Vegye figyelembe, hogy ez a pozíció csak a 6. lépésben változik. Ezt az algoritmust buborékrendezésnek nevezzük. Lassú.
- Ha a kártyakupac üres, vagy csak egy kártyát tartalmaz, akkor a kártyák rendezettek; végeztél.
- Fogd a kártyakupacot. Nézd meg a pakli első (legfelső) lapját.
- A kártya, amelyet nézel, az A kártya. Az A kártya jelenlegi helye a P halomban van.
- Ha az A kártya után nincs több kártya a pakliban, lépjen a 8. lépésre.
- A következő kártya a pakliban a B kártya.
- Ha a B kártya száma alacsonyabb, mint az A kártyaé, cserélje fel az A és a B kártya helyét. Amikor kártyákat cserélsz, ne változtasd meg a P pozíciót.
- Ha a P pozíció után van még egy kártya a pakliban, nézze meg; térjen vissza a 3. lépéshez.
- Ha az utolsó körben nem cserélte fel egyetlen kártya pozícióját sem, akkor végeztünk; a kártyapakli rendezett.
- Ellenkező esetben térjen vissza a 2. lépéshez.
Lépésről-lépésre példa
Vegyük az "5 1 4 2 8" számokat tartalmazó kártyalapokat, és a legkisebb számtól a legnagyobbig rendezzük őket ezzel az algoritmussal. Az algoritmus minden lépésnél összehasonlítja a félkövérrel írt elemeket. A kártyakupac teteje a bal oldalon van.
Első lépés:
( 5 1 4 2 8 ) → {\displaystyle \to } ( 1 5 4 2 8 ) Itt az algoritmus összehasonlítja az első két elemet, és felcseréli őket.
( 1 5 4 2 8 ) → {\displaystyle \to } ( 1 4 5 2 8 )
( 1 4 5 2 8 ) → {\displaystyle \to } ( 1 4 2 5 8 )
( 1 4 2 5 8 ) → {\displaystyle \to } ( 1 4 2 5 8 ) Ezek az elemek már sorrendben vannak, ezért az algoritmus nem cseréli ki őket.
Második lépés:
( 1 4 2 5 8 ) → {\displaystyle \to } ( 1 4 2 5 8 )
( 1 4 2 5 8 ) → {\displaystyle \to } ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → {\displaystyle \to } ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → {\displaystyle \to } ( 1 2 4 5 8 )
Most a kártyapakli már rendezett, de az algoritmusunk ezt nem tudja. Az algoritmusnak egy teljes menetre van szüksége csere nélkül ahhoz, hogy tudja, hogy rendezett.
Harmadik lépés:
( 1 2 4 5 8 ) → {\displaystyle \to } ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → {\displaystyle \to } ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → {\displaystyle \to } ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → {\displaystyle \to } ( 1 2 4 5 8 )
Végül a tömb rendezve van, és az algoritmus megállhat.
Történelem
Ez egy könnyen érthető algoritmus a rendezéshez. Az informatikusok Bubble sortnak nevezték el, mert a kisebb elemek feljebb kerülnek, és minden egyes futtatás során változik a pozíciójuk. Sajnos az algoritmus nem túl jó, mert a rendezéshez hosszú időre van szükség (sok átfutás a kártyakupacon).
Második algoritmus
Ez az algoritmus egy másik ötletet használ. Néha egy probléma megoldása nehéz, de a probléma megváltoztatható, így egyszerűbb, könnyebben megoldható problémákból áll. Ezt nevezzük rekurziónak. Nehezebb megérteni, mint az első példát, de jobb algoritmust ad.
Alapvető elképzelés
- Ha a kupacban nincs kártya, vagy csak egy kártya van benne, akkor a kupacot kiválogattuk, és kész.
- Ossza a kártyakupacot két, nagyjából azonos méretű félre. Ha a kártyák száma páratlan, akkor a két halom közül az egyikben egy kártyával több lesz, mint a másikban.
- Rendezze a két halmot az alábbi algoritmus szerint (Mindkét halom esetében kezdje a lista 1. elemével).
- Egyesítse a két rendezett halmot az alábbiakban leírtak szerint.
- Az eredmény egy rendezett kártyakupac. Kész is van.
Két halom összevonása
Ez két kártyapaklival működik. Az egyiket A-nak, a másikat B-nek hívják. Van egy harmadik pakli, amely az elején üres, C. A végén ez tartalmazza az eredményt.
- Ha az A vagy a B halom üres, akkor a nem üres halom összes kártyáját tegye a C halom tetejére; ezzel kész, a C halom az egyesítés eredménye. (Megjegyzés: fogd az egész paklit, és tedd a C paklira; ha kártyánként csinálod, akkor megváltozik a sorrend, és nem úgy működik, ahogyan kellene).
- Nézd meg az A és a B halom legfelső lapjait. Tedd a C halom tetejére azt, amelyiknek a száma alacsonyabb. Ha a C halomban nem volt kártya, akkor most egy kártya lesz benne.
- Ha az A vagy a B halomban maradtak kártyák, térjünk vissza az 1. lépéshez a rendezéshez.
Történelem
John von Neumann 1945-ben fejlesztette ki ezt az algoritmust. Ő nem számok szerinti rendezésnek, hanem Mergesortnak nevezte el. Ez egy nagyon jó algoritmus a rendezéshez, a többihez képest.
Harmadik algoritmus
Az első algoritmusnak sokkal hosszabb ideig tart a kártyák rendezése, mint a másodiknak, de javítható (jobbá tehető). A buborékválogatást vizsgálva észrevehető, hogy a magas számmal rendelkező kártyák elég gyorsan mozognak a verem tetejéről, de a verem alján lévő alacsony számmal rendelkező kártyáknak hosszú időbe telik, amíg felemelkednek (feljebb kerülnek). Az első algoritmus javítására itt az ötlet:
Ahelyett, hogy két egymás mellett lévő kártyát hasonlítanánk össze, a játék elején egy "különleges" kártyát választunk. Ezután az összes többi kártyát ehhez a kártyához hasonlítják.
- Kezdjük egy A veremmel. Lesz még két másik verem, B és C, amelyeket később hozunk létre.
- Ha az A halomban nincs kártya, vagy csak egy kártya van benne, akkor befejeztük a rendezést.
- Egy kártyát választunk az A halomból, lehetőleg véletlenszerűen. Ezt nevezzük pivotnak.
- Az "A" pakli összes többi lapját ehhez a pivothoz hasonlítjuk. A kisebb számmal rendelkező kártyák a B halomba kerülnek, az azonos vagy nagyobb számmal rendelkező kártyák pedig a C halomba.
- Ha a B vagy C halomban vannak kártyák, akkor ezeket a halmokat ugyanezzel az algoritmussal kell rendezni (a lista 1. helyén kezdjük a B és a C halom esetében is).
- Kész. A rendezett kártyakupacban először a B rendezett kupac, majd a pivot, és végül a C rendezett kupac van.
Történelem
Ezt az algoritmust C. A. R. Hoare fejlesztette ki 1960-ban. Ma az egyik legszélesebb körben használt algoritmus a rendezéshez. A neve Quicksort.
Animáció, amely bemutatja, hogyan működik a buborékválogatás
7 számok rendezése a második számok szerinti rendezési algoritmus (Mergesort) segítségével
A harmadik algoritmus a kártyák rendezéséhez. A piros sávval jelzett elemet választjuk ki sarkpontnak. Kezdetben ez a jobbra lévő elem. Ezt az algoritmust Quicksortnak nevezik.
Algoritmusok összerakása
Ha a játékosoknak szín- és számkártyáik vannak, akkor szín és szám szerint rendezhetik őket, ha elvégzik a "színek szerinti rendezés" algoritmust, majd elvégzik a "számok szerinti rendezés" algoritmust minden egyes színes halomra, majd összerakják a halmokat.
A számok szerinti rendezési algoritmusok nehezebbek, mint a színek szerinti rendezési algoritmusok, mert előfordulhat, hogy többször is meg kell ismételni a lépéseket. Úgy is mondhatnánk, hogy a számok szerinti rendezés bonyolultabb.
Kapcsolódó oldalak
- Az euklideszi algoritmust több mint 2000 évvel ezelőtt találták meg. Képes két szám legnagyobb közös osztóját megtalálni.
Kérdések és válaszok
K: Mi az az algoritmus?
V: Az algoritmus logikai és matematikai problémák megoldására vagy valamilyen feladat elvégzésére szolgáló utasítások összessége.
K: Egy recept is tekinthető algoritmusnak?
V: Igen, egy recept jó példa az algoritmusra, mivel meghatározza a késztermék előállításához szükséges lépéseket.
K: Honnan származik az "algoritmus" szó?
V: Az "algoritmus" szó egy perzsa matematikus, Al-Khwārizmī nevéből származik.
K: Hogyan lehet algoritmusokat írni?
V: Az algoritmusokat meg lehet írni hétköznapi nyelven, de a számítástechnika céljaira pszeudokódban, folyamatábrákban vagy programozási nyelveken írják őket.
K: Mi a különbség a hétköznapi nyelven írt algoritmus és a számítástechnikai algoritmus között?
V: Egy algoritmus hétköznapi nyelven egy feladat elvégzéséhez követhető lépések összességét írja le, míg egy algoritmus a számítástechnikában azoknak a műveleteknek a pontos listája, amelyeket egy Turing-gép végre tud hajtani.
K: Mi az az álkód?
V: Az álkód egy egyszerűsített programozási nyelv, amely lehetővé teszi a programozók számára, hogy algoritmusokat írjanak ki anélkül, hogy belemerülnének egy adott programozási nyelv részleteibe.
K: Miért fontosak az algoritmusok a számítástechnikában?
V: Az algoritmusok azért fontosak a számítástechnikában, mert egyértelmű utasításokat adnak a számítógép számára, amelyeket követni kell, és amelyek lehetővé teszik a feladatok gyors és pontos végrehajtását.