Algoritms
Algoritms ir pakāpeniska procedūra loģisku un matemātisku problēmu risināšanai.
Recepte ir labs algoritma piemērs, jo tajā soli pa solim norādīts, kas ir jādara. Tajā tiek ņemti ievades dati (sastāvdaļas) un iegūts izejas rezultāts (gatavs ēdiens).
Vārdi "algoritms" un "algorisms" ir atvasināti no persiešu matemātiķa Al-Khwārizmī (persiešu: خوارزمی, aptuveni 780-850) vārda.
Neoficiāli algoritmu var saukt par "soļu sarakstu". Algoritmus var uzrakstīt parastā valodā, un tas var būt viss, kas cilvēkam nepieciešams.
Algoritms skaitļošanā ir precīzs operāciju saraksts, ko var veikt ar Tjūringa mašīnu. Algoritmus skaitļošanas vajadzībām raksta pseidokodos, plūsmas diagrammās vai programmēšanas valodās. .
Algoritmu salīdzināšana
Parasti ir vairāk nekā viens veids, kā atrisināt problēmu. Var būt daudz dažādu recepšu, kā pagatavot kādu ēdienu, kas izskatās atšķirīgi, bet galu galā garšo vienādi, kad viss ir pateikts un izdarīts. Tas pats attiecas arī uz algoritmiem. Tomēr daži no šiem veidiem būs labāki par citiem. Ja receptei nepieciešams daudz sarežģītu sastāvdaļu, kuru jums nav, tā nav tik laba kā vienkārša recepte. Kad mēs aplūkojam algoritmus kā problēmu risināšanas veidu, bieži vien mēs vēlamies zināt, cik ilgā laikā dators atrisinātu problēmu, izmantojot konkrēto algoritmu. Rakstot algoritmus, mēs vēlamies, lai mūsu algoritms aizņemtu pēc iespējas mazāk laika, lai mēs varētu atrisināt problēmu pēc iespējas ātrāk.
Dažas receptes gatavošanā ir grūtāk izpildāmas nekā citas, jo to pabeigšanai nepieciešams vairāk laika vai vairāk lietu, kurām jāseko līdzi. Tāpat ir arī ar algoritmiem, un algoritmi ir labāki, ja tos ir vieglāk izpildīt datoram. To, ar ko mēra algoritma sarežģītību, sauc par sarežģītību. Kad mēs jautājam, cik sarežģīts ir algoritms, bieži vien mēs vēlamies zināt, cik ilgā laikā dators atrisinās uzdevumu, ko vēlamies, lai tas atrisinātu.
Šķirošana
Šis ir algoritma piemērs karšu ar krāsām sakārtošanai vienas krāsas kaudzītēs:
- Paņemiet visas kartes.
- Izvēlieties karti no savas rokas un apskatiet tās krāsu.
- Ja jau ir šīs krāsas kāršu kaudzīte, nolieciet šo kārti uz tās kaudzītes.
- Ja nav šīs krāsas kāršu kaudzītes, izveidojiet jaunu kaudzīti tikai ar šīs krāsas kārtīm.
- Ja Jūsu rokās joprojām ir karte, atgriezieties pie otrā soļa.
- Ja Jūsu rokās vēl nav nevienas kārts, tad kārtis tiek sakārtotas. Jūs esat beidzis.
Šķirošana pēc skaitļiem
Šie ir algoritmu piemēri, kā sakārtot kāršu kaudzi ar daudziem dažādiem skaitļiem tā, lai skaitļi būtu sakārtoti.
Spēlētāji sāk ar kāršu kaudzi, kas nav sakārtotas.
Pirmais algoritms
Šis algoritms izskata kāršu kaudzi pa vienai kartei. Šī karte tiek salīdzināta ar nākamo karti kaudzē. Lūdzu, ņemiet vērā, ka šī pozīcija mainās tikai 6. solī. Šo algoritmu sauc par burbuļu šķirošanu. Tas ir lēns.
- Ja kāršu kaudze ir tukša vai tajā ir tikai viena kārts, tā ir sakārtota un viss ir izdarīts.
- Paņemiet kāršu kaudzīti. Paskatieties uz kaudzes pirmo kārti (augšējo).
- Jūsu aplūkojamā karte ir karte A. Karte A pašlaik atrodas P kaudzītē.
- Ja pēc A kārtis kaudzītē vairs nav citu kāršu, pārejiet uz 8. soli.
- Nākamā kārts kaudzītē ir B karte.
- Ja kartē B ir mazāks skaitlis nekā kartē A, apmainiet kāršu A un B pozīcijas. atcerieties, ka to izdarījāt. Kad apmaināsiet kārtis, nemainiet pozīciju P.
- Ja pēc P pozīcijas kaudzītē ir vēl viena karte, paskatieties uz to; atgriezieties pie 3. soļa.
- Ja pēdējā izspēlē neesat mainījis nevienas kārtis, tad kāršu kaudze ir sakārtota.
- Pretējā gadījumā atgriezieties pie 2. soļa.
Soli pa solim piemērs
Paņemsim kāršu kaudzi ar skaitļiem "5 1 4 2 8" un sakārtosim to no mazākā skaitļa līdz lielākajam, izmantojot šo algoritmu. Katrā solī algoritms salīdzina treknrakstā rakstītos elementus. Kāršu kaudzes augšdaļa ir kreisajā pusē.
Pirmā eja:
( 5 1 1 4 2 8 ) → {\displaystyle \to } ( 1 5 5 4 4 2 8 ) Šeit algoritms salīdzina pirmos divus elementus un tos apmaina.
( 1 5 4 4 2 8 ) → {\displaystyle \to } ( 1 4 5 5 2 8 )
( 1 4 5 2 8 ) → {\displaystyle \to } ( 1 4 2 2 5 8 )
( 1 4 2 5 8 ) → {\displaystyle \to } ( 1 4 2 2 5 8 ) Šie elementi jau ir sakārtoti, tāpēc algoritms tos nemaina.
Otrais gājiens:
( 1 4 2 5 8 ) → {\displaystyle \to } ( 1 4 2 5 8 )(
1 4 2 5 8 ) → {\displaystyle \to } ( 1 2 2 4 5 8 )(
1 2 4 5 8 ) → {\displaystyle \to } ( 1 2 4 4 5 8 )
( 1 2 4 5 8 ) → {\displaystyle \to } ( 1 2 4 4 5 8 )
Tagad kāršu kaudze jau ir sakārtota, bet mūsu algoritms to nezina. Algoritmam ir nepieciešams viens vesels piegājiens bez jebkādas apmaiņas, lai zinātu, ka tā ir sakārtota.
Trešais gājiens:
( 1 2 4 4 5 8 ) → {\displaystyle \to } ( 1 2 4 4 5 8 )(
1 2 4 5 8 ) → {\displaystyle \to } ( 1 2 4 5 8 )(
1 2 4 5 8 ) → {\displaystyle \to } ( 1 2 2 4 5 8 )
( 1 2 4 5 8 ) → {\displaystyle \to } ( 1 2 2 4 5 5 8 )
Visbeidzot, masīvs ir sakārtots, un algoritms var apstāties.
Vēsture
Šis ir viegli saprotams šķirošanas algoritms. Datorzinātnieki to nosauca par burbuļveida šķirošanu, jo mazāki elementi pacelsies uz augšu, mainot savu pozīciju katrā piegājienā. Diemžēl šis algoritms nav pārāk labs, jo, lai šķirotu, ir nepieciešams ilgs laiks (daudzas ejas cauri kāršu kaudzei).
Otrais algoritms
Šis algoritms izmanto citu ideju. Dažreiz problēmas atrisināšana ir sarežģīta, bet problēmu var mainīt tā, lai to veidotu vienkāršākas problēmas, kuras ir vieglāk atrisināt. To sauc par rekursiju. Tas ir grūtāk saprotams nekā pirmais piemērs, bet tas dos labāku algoritmu.
Pamatideja
- Ja kaudzītē nav nevienas kartes vai ir tikai viena karte, tā ir sakārtota, un Jūs esat pabeidzis.
- Sadaliet kāršu kaudzi divās apmēram vienāda lieluma daļās. Ja kāršu skaits ir nepāra, vienā no abām kaudzītēm būs par vienu karti vairāk nekā otrā.
- Sakārtojiet katru no abām kaudzēm, izmantojot šo algoritmu (Katrai kaudzei sāciet ar šī saraksta 1. punktu.)
- Apvienojiet abas sakārtotās kaudzes kopā, kā aprakstīts tālāk.
- Rezultāts ir sakārtota kāršu kaudze. Jūs esat pabeidzis.
Divu kaudžu apvienošana
Tas darbojas ar divām kāršu kaudzītēm. Viena no tām saucas A, otra - B. Ir trešā kaudzīte, kas sākumā ir tukša un ko sauc par C. Beigās tajā būs rezultāts.
- Ja A vai B kaudze ir tukša, visas tās kaudzes kārtis, kas nav tukšas, novietojiet uz C kaudzes; viss ir izdarīts, C kaudze ir apvienošanas rezultāts. (Piezīme: paņemiet visu kaudzīti un novietojiet to uz C kaudzītes; ja to darīsiet pa kartēm, mainīsies kārtība, un tas nedarbosies tā, kā vajadzētu.)
- Aplūkojiet A un B kaudzes augšējās kārtis. Kārtiņu ar mazāku numuru novietojiet C kaudzes augšpusē. Ja C kaudzē nebija nevienas kārtis, tagad tajā būs viena kārts.
- Ja A vai B kaudzītē ir palikušas kārtis, atgriezieties pie 1. soļa, lai tās sakārtotu.
Vēsture
Šo algoritmu 1945. gadā izstrādāja Džons fon Neimans. Viņš to nesauca par šķirošanu pēc skaitļiem, bet gan par Mergesort. Tas ir ļoti labs šķirošanas algoritms, salīdzinot ar citiem.
Trešais algoritms
Pirmā algoritma karšu šķirošana aizņem daudz vairāk laika nekā otrā, taču to var uzlabot (padarīt labāku). Aplūkojot burbuļveida šķirošanu, var pamanīt, ka kārtis ar lieliem skaitļiem no kaudzes augšas pārvietojas diezgan ātri, bet kartēm ar maziem skaitļiem kaudzes apakšā ir vajadzīgs ilgs laiks, lai paceltos (pārvietotos uz augšu). Lai uzlabotu pirmo algoritmu, ir šāda ideja:
Tā vietā, lai salīdzinātu divas blakus esošas kārtis, sākumā tiek izvēlēta "īpaša" karte. Pēc tam visas pārējās kartes tiek salīdzinātas ar šo karti.
- Sākam ar kaudzi A. Vēl būs divas citas kaudzes B un C, kas tiks izveidotas vēlāk.
- Ja kaudzē A nav karšu vai ir tikai viena karte, šķirošana ir pabeigta.
- No A kaudzes tiek izvēlēta kārts, ja iespējams, pēc nejaušības principa. To sauc par šarnīru.
- Visas atlikušās A kaudzes kārtis tiek salīdzinātas ar šo šarnīru. Kartes ar mazāku skaitu nonāk B kaudzītē, bet tās, kurām ir vienāds vai lielāks skaits, nonāk C kaudzītē.
- Ja B vai C kaudzēs ir kādas kārtis, šīs kaudzes ir jāsašķiro ar to pašu algoritmu (Sākt no 1. pozīcijas šajā sarakstā gan B, gan C kaudzē pēc kārtas).)
- Paveikts. Sakārtotajā kāršu kaudzē vispirms ir sakārtotā kaudze B, tad šarnīrs un tad sakārtotā kaudze C.
Vēsture
Šo algoritmu 1960. gadā izstrādāja K. A. R. Hūrs. Mūsdienās tas ir viens no visplašāk izmantotajiem šķirošanas algoritmiem. To sauc par Quicksort.
Animācija, kas parāda, kā darbojas burbuļu šķirošana
7 skaitļu šķirošana, izmantojot otro šķirošanas pēc skaitļiem algoritmu (Mergesort)
Trešais kāršu šķirošanas algoritms. Elements ar sarkano joslu tiek izvēlēts kā ass. Sākumā tas ir elements, kas atrodas pa labi. Šo algoritmu sauc par Quicksort.
Algoritmu salikšana kopā
Ja spēlētājiem ir kārtis ar krāsām un cipariem, viņi var tās sašķirot pēc krāsas un skaitļa, ja veic "šķirošanas pēc krāsām" algoritmu, tad veic "šķirošanas pēc cipariem" algoritmu katrai krāsainai kaudzītei un tad saliek kaudzītes kopā.
Šķirošanas pēc skaitļiem algoritmus ir grūtāk veikt nekā šķirošanas pēc krāsām algoritmus, jo var nākties atkārtot darbības vairākas reizes. Varētu teikt, ka šķirošana pēc skaitļiem ir sarežģītāka.
Saistītās lapas
- Eiklīda algoritms tika atrasts pirms vairāk nekā 2000 gadiem. Ar to var atrast divu skaitļu lielāko kopīgo dalītāju.
Jautājumi un atbildes
J: Kas ir algoritms?
A: Algoritms ir instrukciju kopums loģisku un matemātisku problēmu risināšanai vai kāda uzdevuma izpildei.
J: Vai recepti var uzskatīt par algoritmu?
A: Jā, recepte ir labs algoritma piemērs, jo tajā ir izklāstīti soļi, kas vajadzīgi, lai iegūtu gatavu produktu.
J: No kurienes nāk vārds "algoritms"?
A: Vārds "algoritms" cēlies no persiešu matemātiķa Al-Khwārizmī vārda.
J: Kā var uzrakstīt algoritmus?
A: Algoritmus var rakstīt parastā valodā, bet skaitļošanas vajadzībām tos raksta pseidokodā, plūsmas diagrammās vai programmēšanas valodās.
J: Kāda ir atšķirība starp algoritmu parastajā valodā un algoritmu skaitļošanas tehnikā?
Algoritms parastajā valodā apraksta darbību kopumu, ko var veikt, lai izpildītu kādu uzdevumu, bet algoritms skaitļošanas tehnikā ir precīzs operāciju saraksts, ko var veikt ar Tjūringa mašīnu.
J: Kas ir pseidokods?
A: Pseidokods ir vienkāršota programmēšanas valoda, kas ļauj programmētājiem rakstīt algoritmus, neiedziļinoties konkrētas programmēšanas valodas detaļās.
J: Kāpēc algoritmi ir svarīgi skaitļošanā?
Algoritmi ir svarīgi skaitļošanas tehnikā, jo tie nodrošina skaidru instrukciju kopumu, pēc kura dators var vadīties, un tas ļauj tam ātri un precīzi izpildīt uzdevumus.