Algoritm
Algoritm on loogiliste ja matemaatiliste probleemide lahendamise samm-sammuline protseduur.
Retsept on hea näide algoritmist, sest selles on samm-sammult kirjas, mida tuleb teha. See võtab sisendid (koostisosad) ja annab tulemuse (valmis roog).
Sõnad "algoritm" ja "algorism" pärinevad pärsia matemaatiku Al-Khwārizmī (pärsia keeles خوارزمی, umbes 780-850) nimest.
Mitteametlikult võib algoritmi nimetada "sammude loeteluks". Algoritme saab kirjutada tavakeeles ja see võib olla kõik, mida inimene vajab.
Algoritm on arvutustehnikas täpne loetelu operatsioonidest, mida Turingi masin võiks teha. Algoritmid kirjutatakse arvutamise eesmärgil pseudokoodis, vooskeemides või programmeerimiskeeltes. .
Algoritmide võrdlemine
Probleemi lahendamiseks on tavaliselt rohkem kui üks viis. Teatud roa valmistamiseks võib olla palju erinevaid retsepte, mis näevad küll erinevad välja, kuid lõppkokkuvõttes maitsevad samamoodi. Sama kehtib ka algoritmide kohta. Mõned neist viisidest on siiski paremad kui teised. Kui retsept vajab palju keerulisi koostisosi, mida teil ei ole, ei ole see nii hea kui lihtne retsept. Kui me vaatleme algoritme kui probleemide lahendamise viise, tahame sageli teada, kui kaua kuluks arvutil aega, et lahendada probleem konkreetse algoritmi abil. Kui me kirjutame algoritme, tahame, et meie algoritm võtaks võimalikult vähe aega, et saaksime oma probleemi võimalikult kiiresti lahendada.
Mõned retseptid on toiduvalmistamisel keerulisemad kui teised, sest nende valmistamine võtab rohkem aega või on rohkem asju, mida tuleb jälgida. Sama kehtib ka algoritmide kohta ja algoritmid on paremad, kui neid on arvutil lihtsam teha. Seda, mis mõõdab algoritmi raskust, nimetatakse keerukuseks. Kui me küsime, kui keeruline on mingi algoritm, tahame sageli teada, kui kaua võtab arvutil aega lahendada probleem, mida me tahame, et ta lahendaks.
Sorteerimine
See on näide algoritmist, mis sorteerib värvidega kaardid samavärvilistesse kuhjadesse:
- Korja kõik kaardid üles.
- Valige oma käest kaart ja vaadake, mis värvi kaart on.
- Kui selle värvi kaartide hunnik on juba olemas, pane see kaart sellele hunnikule.
- Kui selle värvi kaartide hunnikut ei ole, tee uus hunnik ainult selle värvi kaartidest.
- Kui teie käes on veel kaart, minge tagasi teise sammu juurde.
- Kui teie käes ei ole veel ühtegi kaarti, siis kaardid sorteeritakse. Te olete valmis.
Sorteerimine numbrite järgi
Need on näited algoritmide kohta, mis sorteerivad paljude erinevate numbritega kaartide virna nii, et numbrid oleksid järjekorras.
Mängijad alustavad kaardipakiga, mida ei ole sorteeritud.
Esimene algoritm
See algoritm läbib kaardipaki ühe kaardi korraga. Seda kaarti võrreldakse virna järgmise kaardiga. Pange tähele, et see positsioon muutub alles sammus 6. Seda algoritmi nimetatakse mulli sorteerimiseks. See on aeglane.
- Kui kaardipinu on tühi või sisaldab ainult ühte kaarti, on see sorteeritud; olete valmis.
- Võtke kaardipakk. Vaadake virna esimest (ülemist) kaarti.
- Kaart, mida te vaatate, on kaart A. Kaardi A praegune asukoht on virnas P.
- Kui pärast kaarti A ei ole virnas enam ühtegi kaarti, minge sammu 8 juurde.
- Järgmine kaart virnas on kaart B.
- Kui kaardil B on väiksem number kui kaardil A, vahetage kaartide A ja B positsioonid. Kui vahetate kaarte, ärge muutke positsiooni P.
- Kui pärast positsiooni P on virnas veel üks kaart, vaadake seda; minge tagasi sammu 3 juurde.
- Kui te ei vahetanud ühegi kaardi positsiooni viimases mängus, siis olete lõpetanud; kaardipinu on sorteeritud.
- Vastasel juhul minge tagasi sammu 2 juurde.
Näide samm-sammult
Võtame kaardipaki numbritega "5 1 4 2 8" ja sorteerime selle väikseimast numbrist suurimani, kasutades seda algoritmi. Igal sammul võrdleb algoritm paksus kirjas olevaid elemente. Kaartide virna ülemine osa on vasakul pool.
Esimene läbimine:
( 5 1 4 2 8 ) → \displaystyle \to } ( 1 5 4 2 8 ) Siin võrdleb algoritm kahte esimest elementi ja vahetab need.
( 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 ) Need elemendid on juba järjekorras, seega algoritm ei vaheta neid.
Teine läbimine:
( 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 } {\displaystyle \to } ( 1 2 4 5 8 )
Nüüd on kaartide virn juba sorteeritud, kuid meie algoritm ei tea seda. Algoritmil on vaja ühte tervet käiku ilma vahetuseta, et teada saada, et see on sorteeritud.
Kolmas läbimine:
( 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 } {\displaystyle \to } ( 1 2 4 5 8 )
Lõpuks on massiiv sorteeritud ja algoritm võib lõpetada.
Ajalugu
See on kergesti arusaadav sorteerimise algoritm. Arvutiteadlased nimetasid seda mulli sorteerimiseks, sest väiksemad elemendid tõusevad üles, muutes oma positsiooni iga kord. Kahjuks ei ole see algoritm väga hea, sest sorteerimiseks kulub palju aega (palju läbikäike läbi kaardihunniku).
Teine algoritm
See algoritm kasutab teist ideed. Mõnikord on probleemi lahendamine keeruline, kuid probleemi saab muuta nii, et see koosneb lihtsamatest probleemidest, mida on lihtsam lahendada. Seda nimetatakse rekursiooniks. Seda on raskem mõista kui esimest näidet, kuid see annab parema algoritmi.
Põhiidee
- Kui virnas ei ole ühtegi kaarti või on seal ainult üks kaart, on see sorteeritud ja te olete valmis.
- Jagage kaardipakett kaheks umbes ühesuuruseks pooleks. Kui kaartide arv on paaritu, on ühes kahest virnast üks kaart rohkem kui teises.
- Sorteerige mõlemad virnad selle algoritmi abil (alustage mõlema virna puhul selle nimekirja punktist 1).
- Ühendage kaks sorteeritud virna kokku, nagu allpool kirjeldatud.
- Tulemuseks on sorteeritud kaardipakk. Te olete valmis.
Kahe virna ühendamine
See töötab kahe kaardipakiga. Üks neist kannab nime A, teine B. On olemas kolmas, alguses tühi virn, mille nimi on C. Lõpuks sisaldab see tulemust.
- Kui kas virn A või virn B on tühi, asetage kõik selle virna kaardid, mis ei ole tühi, virna C peale; olete valmis, virn C on ühendamise tulemus. (Märkus: võtke kogu virn ja pange see virnale C; kui teete seda kaartide kaupa, muutub järjekord ja see ei toimi nii, nagu peaks).
- Vaadake virna A ja virna B ülemisi kaarte. Pange see, mille number on väiksem, virna C peale. Kui virnas C ei olnud ühtegi kaarti, siis nüüd on seal üks kaart.
- Kui kas virnas A või virnas B on veel kaarte, minge nende sorteerimiseks tagasi sammu 1 juurde.
Ajalugu
John von Neumann töötas selle algoritmi välja 1945. aastal. Ta ei nimetanud seda numbrite järgi sorteerimiseks, vaid Mergesortiks. See on väga hea sorteerimisalgoritm, võrreldes teistega.
Kolmas algoritm
Esimese algoritmi puhul võtab kaartide sorteerimine palju kauem aega kui teise puhul, kuid seda on võimalik parandada (paremaks teha). Vaadates mullisorteerimist, võib märgata, et suurte numbritega kaardid liiguvad virna ülaosast üsna kiiresti, kuid madala numbriga kaartidel, mis on virna allosas, võtab tõusmine (ülespoole liikumine) kaua aega. Esimese algoritmi parandamiseks on siin idee:
Selle asemel, et võrrelda kahte kõrvuti olevat kaarti, valitakse alguses üks "eriline" kaart. Seejärel võrreldakse kõiki teisi kaarte selle kaardiga.
- Alustame virna A. On veel kaks virna B ja C, mis luuakse hiljem.
- Kui virnas A ei ole ühtegi kaarti või on ainult üks kaart, on sorteerimine lõpetatud.
- Kaart valitakse virnast A, võimaluse korral juhuslikult. Seda nimetatakse pivotiks.
- Kõik ülejäänud kaardid virnast A võrreldakse selle pöördepunktiga. Väiksema numbriga kaardid lähevad virna B, sama või suurema numbriga kaardid lähevad virna C.
- Kui virnades B või C on kaarte, tuleb need virnad sorteerida sama algoritmi abil (alustage nii virna B kui ka virna C puhul selle nimekirja positsioonist 1).
- Tehtud. Sorteeritud kaardipinu on kõigepealt sorteeritud virn B, seejärel pivot ja seejärel sorteeritud virn C.
Ajalugu
Selle algoritmi töötas 1960. aastal välja C. A. R. Hoare. See on tänapäeval üks kõige laialdasemalt kasutatavaid sorteerimisalgoritme. Seda nimetatakse Quicksortiks.
Animatsioon, mis näitab, kuidas mulli sorteerimine toimib
7 numbri sorteerimine teise numbrite järgi sorteerimise algoritmi (Mergesort) abil
Kolmas algoritm kaartide sorteerimiseks. Pöördepunktiks valitakse punase ribaga element. Alguses on see element kõige paremal. Seda algoritmi nimetatakse Quicksort'iks.
Algoritmide koostamine
Kui mängijatel on värvide ja numbritega kaardid, saavad nad neid sorteerida värvide ja numbrite järgi, kui nad teevad algoritmi "sorteerimine värvide järgi", seejärel teevad algoritmi "sorteerimine numbrite järgi" igale värvilisele virnale, seejärel panevad virnad kokku.
Numbrite järgi sorteerimise algoritme on keerulisem teha kui värvide järgi sorteerimise algoritmi, sest neid samme võib olla vaja teha mitu korda uuesti. Võib öelda, et numbrite järgi sorteerimine on keerulisem.
Seotud leheküljed
- Eukleidese algoritm leiti üle 2000 aasta tagasi. Sellega on võimalik leida kahe arvu suurim ühine jagaja.
Küsimused ja vastused
K: Mis on algoritm?
V: Algoritm on loogiliste ja matemaatiliste probleemide lahendamise või mõne ülesande täitmise juhiste kogum.
K: Kas retsepti võib pidada algoritmiks?
V: Jah, retsept on hea näide algoritmi kohta, sest selles on esitatud lõpptoote valmistamiseks vajalikud sammud.
K: Kust tuleb sõna "algoritm"?
V: Sõna "algoritm" pärineb pärsia matemaatiku Al-Khwārizmī nimest.
K: Kuidas saab algoritme kirjutada?
V: Algoritme võib kirjutada tavakeeles, kuid arvutamise eesmärgil kirjutatakse neid pseudokoodis, vooskeemides või programmeerimiskeeltes.
K: Mis vahe on algoritmil tavakeeles ja algoritmil arvutustehnikas?
V: Algoritm tavakeeles kirjeldab sammude kogumit, mida saab järgida ülesande täitmiseks, samas kui algoritm arvutuses on täpne loetelu operatsioonidest, mida Turingi masin võiks sooritada.
K: Mis on pseudokood?
V: Pseudokood on lihtsustatud programmeerimiskeel, mis võimaldab programmeerijatel kirjutada algoritme, ilma et nad takerduksid konkreetse programmeerimiskeele üksikasjadesse.
K: Miks on algoritmid arvutamises olulised?
V: Algoritmid on arvutite puhul olulised, sest need annavad arvutile selgeid juhiseid, mida ta saab järgida, mis võimaldab tal ülesandeid kiiresti ja täpselt täita.