logo

Algoritmu definīcija, veidi, sarežģītība un piemēri

Algoritms ir precīzi definēts secīgs skaitļošanas paņēmiens, kas pieņem vērtību vai vērtību kopumu kā ievadi un rada problēmas risināšanai nepieciešamo(-s) izvadi(-us).

Vai arī mēs varam teikt, ka algoritms ir precīzs tad un tikai tad, ja tas apstājas ar pareizu izvadi katrai ievades instancei.



ALGORITMU VAJADZĪBA:

Algoritmi tiek izmantoti, lai sistemātiski un efektīvi atrisinātu problēmas vai automatizētu uzdevumus. Tie ir instrukciju vai noteikumu kopums, kas vada datoru vai programmatūru, veicot noteiktu uzdevumu vai risinot problēmu.

java izveides saraksts

Ir vairāki iemesli, kāpēc mēs izmantojam algoritmus:



    Efektivitāte: algoritmi var veikt uzdevumus ātri un precīzi, padarot tos par būtisku rīku uzdevumiem, kuriem nepieciešams daudz aprēķinu vai datu apstrādes. Konsekvence: Algoritmi ir atkārtojami un nodrošina konsekventus rezultātus katru reizi, kad tie tiek izpildīti. Tas ir svarīgi, strādājot ar lielu datu apjomu vai sarežģītiem procesiem. Mērogojamība: algoritmus var palielināt, lai apstrādātu lielas datu kopas vai sarežģītas problēmas, kas padara tos noderīgus lietojumprogrammām, kurām nepieciešams apstrādāt lielu datu apjomu. Automatizācija: algoritmi var automatizēt atkārtotus uzdevumus, samazinot vajadzību pēc cilvēka iejaukšanās un atbrīvojot laiku citiem uzdevumiem. Standartizācija. Algoritmus var standartizēt un koplietot starp dažādām komandām vai organizācijām, tādējādi cilvēkiem ir vieglāk sadarboties un dalīties zināšanās.

Kopumā algoritmi ir būtisks rīks problēmu risināšanai dažādās jomās, tostarp datorzinātnēs, inženierzinātnēs, datu analīzē, finansēs un daudzās citās.

Piemērs:

Apsveriet kasti, kurā neviens nevar redzēt, kas notiek iekšā, mēs sakām, ka tā ir melna kaste.

Mēs dodam ievadi lodziņā, un tas dod mums vajadzīgo izvadi, bet procedūra, kas mums, iespējams, ir jāzina aiz ievades pārveidošanas par vēlamo izvadi, ir ALGORITMS.



Algoritms nav atkarīgs no izmantotās valodas. Tas programmētājam norāda problēmas risināšanai izmantoto loģiku. Tātad, tā ir loģiska soli pa solim procedūra, kas programmētājiem darbojas kā plāns.

Reālās dzīves piemēri, kas definē algoritmu izmantošanu:

  • Apsveriet pulksteni. Mēs zinām, ka pulkstenis tikšķ, bet kā ražotājs iestata šos uzgriežņus un skrūves, lai tas turpinātu kustēties ik pēc 60 sekundēm, min rādītājam jāpārvietojas un ik pēc 60 minūtēm jākustas stundu rādītājs? Tātad, lai atrisinātu šo problēmu, aiz tā ir jābūt algoritmam.
  • Vai esat redzējuši kādu, kas gatavo jūsu iecienītāko ēdienu? Vai recepte tam ir nepieciešama? Jā, tas ir nepieciešams, jo recepte ir secīga procedūra, kas jēlu kartupeli pārvērš par vēsu kartupeli. Lūk, kāds ir algoritms: izpildiet procedūru, lai iegūtu vēlamo rezultātu. Vai ir jāievēro secība? Jā, secība ir vissvarīgākā lieta, kas jāievēro, lai iegūtu to, ko mēs vēlamies.

Algoritmu veidi:

  • Šķirošanas algoritmi: Burbuļu kārtošana, ievietošanas kārtošana un daudz kas cits. Šie algoritmi tiek izmantoti, lai kārtotu datus noteiktā formātā.
  • Meklēšanas algoritmi: Lineārā meklēšana, binārā meklēšana utt. Šie algoritmi tiek izmantoti, lai atrastu vērtību vai ierakstu, ko lietotājs pieprasa.
  • Grafiku algoritmi : to izmanto, lai rastu risinājumus problēmām, piemēram, īsākā ceļa atrašanai starp pilsētām, un reālās dzīves problēmām, piemēram, pārdevēja ceļošanas problēmām.

Šķirošanas algoritmi ir algoritmi, kas ņem elementu kolekciju un pārkārto tos noteiktā secībā (piemēram, augošā vai dilstošā secībā). Ir daudz dažādu šķirošanas algoritmu, katram ir savas stiprās un vājās puses. Daži no visbiežāk izmantotajiem šķirošanas algoritmiem ir:

Burbuļu kārtošana: Vienkāršs kārtošanas algoritms, kas atkārtoti iziet cauri sarakstam, salīdzina blakus esošos elementus un apmaina tos, ja tie atrodas nepareizā secībā.

Ievietošanas kārtošana: Vienkāršs kārtošanas algoritms, kas izveido galīgo sakārtoto masīvu pa vienam vienumam, salīdzinot katru jauno vienumu ar vienumiem, kas jau ir sakārtoti, un ievietojot to pareizajā pozīcijā.

Atlases kārtošana: Vienkāršs kārtošanas algoritms, kas atkārtoti atlasa minimālo elementu no nešķirotās masīva daļas un pārvieto to uz šķirotās daļas beigām.

Apvienot kārtot: Šķirot un iekarot kārtošanas algoritms, kas darbojas, sadalot nešķiroto sarakstu n apakšsarakstos, sakārtojot katru apakšsarakstu un pēc tam atkal apvienojot tos vienā sakārtotā sarakstā.

Ātrā kārtošana: Šķirošanas algoritms, kas darbojas, atlasot rakursa elementu no masīva un sadalot pārējos elementus divos apakšmasīvos atkarībā no tā, vai tie ir mazāki vai lielāki par rakurpunktu. Pēc tam apakšmasīvi tiek sakārtoti rekursīvi.

Katram no šiem algoritmiem ir atšķirīga laika un telpas sarežģītība, tāpēc daži no tiem ir piemērotāki noteiktiem lietošanas gadījumiem nekā citi.

Meklēšanas algoritmi ir algoritmi, kas datu struktūrā (piemēram, masīvā vai saistītā sarakstā) meklē noteiktu elementu vai vērtību. Daži no visbiežāk izmantotajiem meklēšanas algoritmiem ir:

Lineārā meklēšana: Vienkāršs meklēšanas algoritms, kas atkārto katru saraksta elementu, līdz atrod atbilstību.

Binārā meklēšana: Meklēšanas algoritms, kas darbojas, šķirotu sarakstu atkārtoti sadalot uz pusēm, līdz tiek atrasts vajadzīgais elements vai var konstatēt, ka elementa nav.

Pārlēkta meklēšana: Meklēšanas algoritms, kas darbojas, lecot uz priekšu pa fiksētiem soļiem sarakstā, līdz tiek atrasts piemērots kandidāts, un pēc tam veicot lineāru meklēšanu apkārtējos elementos.

Interpolācijas meklēšana : meklēšanas algoritms, kas darbojas, izmantojot informāciju par vērtību diapazonu sarakstā, lai novērtētu vēlamā elementa pozīciju un pēc tam pārbaudītu, vai tas patiešām ir.

Hash tabulas meklēšana: Meklēšanas algoritms, kas izmanto jaucējfunkciju, lai kartētu elementus ar indeksiem masīvā, un pēc tam veic pastāvīga laika meklēšanu masīvā, lai atrastu vajadzīgo elementu.

aktieris Zeenat Aman

Katram no šiem algoritmiem ir atšķirīga laika un telpas sarežģītība, tādēļ daži no tiem ir piemērotāki noteiktiem lietošanas gadījumiem nekā citi. Izmantotā algoritma izvēle ir atkarīga no konkrētām problēmas prasībām, piemēram, datu struktūras lieluma, vērtību sadalījuma un vēlamās laika sarežģītības.

Grafiku algoritmi ir algoritmu kopa, ko izmanto, lai apstrādātu, analizētu un izprastu grafiku datu struktūras. Grafiki ir matemātiskas struktūras, ko izmanto, lai modelētu attiecības starp objektiem, kur objekti tiek attēloti kā virsotnes (vai mezgli), bet attiecības starp tiem tiek attēlotas kā malas. Grafiku algoritmi tiek izmantoti dažādās lietojumprogrammās, piemēram, tīkla analīzē, sociālo tīklu analīzē, ieteikumu sistēmās un daudzās citās jomās, kur ir svarīgi izprast attiecības starp objektiem. Daži no izplatītākajiem grafiku algoritmiem ietver:

Īsākā ceļa algoritmi (piemēram, Dijkstra's, Bellman-Ford, A*)
Minimālā aptverošā koka algoritmi (piem., Kruskal, Prim)
Maksimālās plūsmas algoritmi (piem., Fords-Fulkersons, Edmonds-Karps)
Tīkla plūsmas algoritmi (piemēram, divpusējā atbilstība)
Savienojamības algoritmi (piem., meklēšana pēc dziļuma, meklēšana pēc plašuma)

Kāpēc mēs izmantojam algoritmus?

Apsveriet, ka divi bērni, Amans un Rohans, risina Rubika kubu. Aman zina, kā to atrisināt noteiktā skaitā soļu. No otras puses, Rohans zina, ka viņš to darīs, bet nezina par procedūru. Amans atrisina kubu 2 minūšu laikā, savukārt Rohans joprojām ir iestrēdzis, un dienas beigās viņam kaut kā izdevās to atrisināt (varbūt krāpās, jo procedūra ir nepieciešama).

Tātad laiks, kas nepieciešams, lai atrisinātu ar procedūru/algoritmu, ir daudz efektīvāks nekā bez jebkādas procedūras. Tāpēc ir nepieciešams algoritms.

Runājot par IT problēmas risinājuma izstrādi, datori ir ātri, bet ne bezgalīgi ātri. Atmiņa var būt lēta, bet ne bezmaksas. Tātad laika aprēķināšana ir ierobežots resurss, un tā ir arī vieta atmiņā. Tāpēc mums šie resursi jāizmanto saprātīgi, un algoritmi, kas ir efektīvi laika un telpas ziņā, palīdzēs to izdarīt.

Algoritma izveide:

Tā kā algoritms ir neatkarīgs no valodas, mēs rakstām darbības, lai parādītu problēmas risināšanai izmantojamā risinājuma loģiku. Bet pirms algoritma rakstīšanas ņemiet vērā šādus punktus:

  • Algoritmam jābūt skaidram un nepārprotamam.
  • Algoritmā jābūt 0 vai vairāk precīzi definētu ievades datu.
  • Algoritmam ir jārada viena vai vairākas precīzi definētas izejas, kas ir līdzvērtīgas vēlamajai izvadei. Pēc noteikta darbību skaita algoritmiem ir jāapstājas.
  • Algoritmi jāapstājas vai jābeidzas pēc noteikta skaita soļu.
  • Algoritmā ir jāsniedz soli pa solim instrukcijas, un tām jābūt neatkarīgiem no datora koda.

Piemērs: algoritms, lai reizinātu 2 skaitļus un izdrukātu rezultātu:

1. darbība: Sākt
2. darbība: Iegūstiet zināšanas par ievadi. Šeit mums ir nepieciešami 3 mainīgie; a un b būs lietotāja ievade, un c saglabās rezultātu.
3. darbība: Deklarē a, b, c mainīgos.
4. darbība: Ievadiet a un b mainīgo no lietotāja.
5. darbība: Ziniet problēmu un atrodiet risinājumu, izmantojot operatorus, datu struktūras un loģiku

Mums jāreizina a un b mainīgie, lai mēs izmantotu operatoru * un piešķirtu rezultātu c.
Tas ir c <- a * b

6. darbība: Pārbaudiet, kā dot produkciju, Šeit mums ir jāizdrukā izvade. Tāpēc rakstiet print c
7. darbība: Beigas

1. piemērs: Uzrakstiet algoritmu, lai atrastu visu masīvā esošo elementu maksimumu.
Izpildiet tālāk norādīto algoritmu.

1. darbība: Sāciet programmu
2. darbība: Deklarējiet mainīgo max ar masīva pirmā elementa vērtību.
3. darbība: Salīdziniet max ar citiem elementiem, izmantojot cilpu.
4. darbība: Ja maks 5. darbība: Ja nav palicis neviens elements, atgriezieties vai izdrukājiet maksimumu, pretējā gadījumā pārejiet uz 3. darbību.
6. darbība: Risinājuma beigas

2. piemērs: Uzrakstiet algoritmu, lai atrastu 3 priekšmetu vidējo vērtību.
Izpildiet tālāk norādīto algoritmu.

1. darbība: Sāciet programmu
2. darbība: Teiksim, deklarējiet un izlasiet 3 tēmu S1, S2, S3
3. darbība: Aprēķiniet visu 3 priekšmetu vērtību summu un saglabājiet rezultātu mainīgajā Sum (Summa = S1+S2+S3)
4. darbība: Sadaliet summu ar 3 un piešķiriet to vidējam mainīgajam. (vidējais = summa/3)
5. darbība: Izdrukājiet vērtību Vidēji 3 priekšmeti
6. darbība: Risinājuma beigas

Uzziniet par algoritmu sarežģītību:

Algoritmu sarežģītība attiecas uz resursu (piemēram, laika vai atmiņas) daudzumu, kas nepieciešams problēmas risināšanai vai uzdevuma veikšanai. Visizplatītākais sarežģītības mērs ir laika sarežģītība, kas attiecas uz laiku, kas algoritmam nepieciešams, lai iegūtu rezultātu, atkarībā no ievades lieluma. Atmiņas sarežģītība attiecas uz algoritma izmantoto atmiņas apjomu. Algoritmu izstrādātāji cenšas izstrādāt algoritmus ar iespējami mazāku laika un atmiņas sarežģītību, jo tas padara tos efektīvākus un mērogojamākus.

Algoritma sarežģītība ir funkcija, kas apraksta algoritma efektivitāti attiecībā uz algoritmam jāapstrādā datu apjomu.

ekspertu sistēmas

Parasti šīs funkcijas domēnam un diapazonam ir dabiskas vienības.

Algoritms tiek analizēts, izmantojot laika sarežģītību un telpas sarežģītību. Efektīva algoritma rakstīšana palīdz patērēt minimālo laiku loģikas apstrādei. Algoritmam A tas tiek novērtēts, pamatojoties uz diviem parametriem n izmēra ievadei:

  • Laika sarežģītība: Laiks, kas algoritmam vajadzīgs, lai atrisinātu problēmu. To mēra, aprēķinot cilpu iterāciju, salīdzinājumu skaitu utt.
  • Laika sarežģītība ir funkcija, kas apraksta algoritmam nepieciešamo laiku, ņemot vērā algoritma ievades apjomu.
  • Laiks var nozīmēt veikto atmiņas piekļūšanas reižu skaitu, veselu skaitļu salīdzinājumu skaitu, iekšējās cilpas izpildes reižu skaitu vai kādu citu dabisku vienību, kas saistīta ar algoritma reāllaika laiku.
  • Kosmosa sarežģītība: Algoritma aizņemtā vieta problēmas risināšanai. Tas ietver vietu, ko izmanto nepieciešamie ievades mainīgie, un jebkuru papildu vietu (izņemot ievades aizņemto vietu), ko izmanto algoritms. Piemēram, ja mēs izmantojam hash tabulu (sava ​​veida datu struktūru), mums ir nepieciešams masīvs, lai saglabātu vērtības
  • tā ir aizņemta papildu vieta, tāpēc tā tiks ņemta vērā algoritma telpas sarežģītībā. Šī papildu telpa ir pazīstama kā palīgtelpa.
  • Telpas sarežģītība ir funkcija, kas apraksta algoritma aizņemtās atmiņas (telpas) apjomu, ņemot vērā algoritma ievades apjomu.
  • Telpas sarežģītība dažreiz tiek ignorēta, jo izmantotā telpa ir minimāla un/vai acīmredzama, bet dažreiz tā kļūst par laika problēmu.

.Darbību laika sarežģītība:

  • Datu struktūras izvēlei jābūt balstītai uz veicamo darbību laika sarežģītību.
  • Laika sarežģītību nosaka, cik reižu nepieciešams, lai palaistu noteiktu algoritmu, pamatojoties uz ievades garumu.
  • Algoritma laika sarežģītība ir laiks, kas nepieciešams katra priekšraksta pabeigšanai. Tas ir ļoti atkarīgs no apstrādāto datu apjoma.
  • Piemēram, ja jums bieži ir jāveic meklēšana, jums vajadzētu izmantot bināro meklēšanas koku.

. Operāciju sarežģītība telpā:

  • Datu struktūras izvēlei jābūt balstītai uz veicamo darbību sarežģītību telpā.
  • Atmiņas apjomu, ko programma izmanto tās izpildei, parāda tās telpas sarežģītība.
  • Tā kā programmai ir nepieciešama atmiņa, lai tās darbības laikā saglabātu ievades datus un laika vērtības, telpas sarežģītība ir palīgtelpa un ievades vieta.
  • Piemēram, ja jums ir jāuzglabā daudz datu, jums vajadzētu izmantot masīvu.

sarežģīti gadījumi:

Ir divi plaši pētīti algoritmu sarežģītības gadījumi:

1. Labākā gadījuma sarežģītība: Labākais algoritma scenārijs ir scenārijs, kurā algoritms veic minimālo darba apjomu (piemēram, aizņem vismazāko laiku, izmanto vismazāk atmiņas utt.).

2. Sliktākā gadījuma sarežģītība: Sliktākais algoritma scenārijs ir scenārijs, kurā algoritms veic maksimālo darba apjomu (piemēram, aizņem visilgāko laiku, izmanto visvairāk atmiņas utt.).

Analizējot algoritma sarežģītību, bieži vien ir informatīvāk izpētīt sliktākā gadījuma scenāriju, jo tas dod garantētu algoritma veiktspējas augšējo robežu. Dažkārt tiek veikta labākā scenārija analīze, taču tā parasti ir mazāk svarīga, jo tā nodrošina zemāko robežu, ko bieži vien ir nenozīmīgi sasniegt.

Algoritmu priekšrocības

  • Viegli saprast: Tā kā tas ir pakāpenisks noteiktas problēmas risinājuma attēlojums, to ir viegli saprast.
  • Neatkarīgi no valodas: Tas nav atkarīgs no programmēšanas valodas, tāpēc to var viegli saprast ikviens.
  • Atkļūdošana/kļūdu atrašana: Katrs solis ir neatkarīgs/plūsmā, tāpēc kļūdu būs viegli pamanīt un novērst.
  • Apakšproblēmas: Tas ir uzrakstīts plūsmā, tāpēc tagad programmētājs var sadalīt uzdevumus, kas atvieglo to kodēšanu.

Algoritmu trūkumi

  • Efektīvu algoritmu izveide ir laikietilpīga un prasa labas loģiskās prasmes.
  • Nepatīkami algoritmos rādīt sazarojumus un cilpas.