Algoritms ir instrukciju secība, kas tiek izpildīta iepriekš noteiktā secībā, lai atrisinātu problēmu vai pabeigtu darbu. Funkcija ir koda bloks, ko var izsaukt un izpildīt no citām programmas daļām.
Instrukciju kopums problēmas risināšanai vai noteiktas darbības veikšanai. Datorzinātnēs algoritmus izmanto visdažādākajām operācijām, sākot no fundamentālas matemātikas līdz sarežģītai datu apstrādei.
Viens no izplatītākajiem algoritmiem, ko izmanto C, ir šķirošanas algoritms. Kārtošanas algoritms sakārto vienumu kolekciju noteiktā secībā, piemēram, skaitliski vai alfabētiski.
Ir daudz šķirošanas algoritmu, katram ir priekšrocības un trūkumi. Visizplatītākie C šķirošanas algoritmi ir ātrā kārtošana, sapludināšana un kārtošana.
Viena no galvenajām C iezīmēm ir rādītāja atbalsts. Tas ļauj efektīvi manipulēt ar datu struktūrām, piemēram, masīviem, rindām utt. Tas padara to piemērotu tādu algoritmu ieviešanai, kuriem nepieciešama sarežģīta datu manipulācija, piemēram, šķirošana un algoritmiskā meklēšana.
Viens no slavenākajiem C valodā ieviestās programmatūras bibliotēkas piemēriem ir standarta veidņu bibliotēka (STL). Šī bibliotēka nodrošina plašu algoritmu klāstu tādiem uzdevumiem kā datu kārtošana, meklēšana un manipulācijas ar datu struktūrām.
Algoritma iezīmes
Tas nosaka vairākas svarīgas algoritma iezīmes, tostarp:
java baitu masīvs uz virkni
Algoritmu analīze
Algoritmiskā analīze ir algoritma veiktspējas novērtēšanas process, ņemot vērā efektivitāti, sarežģītību un citus kritērijus. Parasti tas tiek darīts, lai novērtētu daudzus algoritmus un izvēlētos optimālo risinājumu noteiktai problēmai vai programmatūrai.
Algoritmu analīze parasti ietver to laika un telpas sarežģītības mērīšanu.
Tāpat kā ar vietas sarežģītību, kas raksturo vajadzīgās atmiņas vai diska vietas apjomu, laika sarežģītība apraksta, cik ilgi algoritms nosaka uzdevuma izpildi.
Ir dažādi veidi, kā analizēt algoritmu laika sarežģītību, piemēram, Big O un Omega apzīmējumi. Omega simbols nodrošina algoritma laika sarežģītības augšējo robežu, savukārt Omega simbols nodrošina apakšējo robežu.
Papildus laika un telpas sarežģītības mērīšanai algoritmu analīze ietver arī citus kritērijus, piemēram, stabilitāti, paralēlismu un mērogojamību.
Tie ietver divu veidu analīzi.
viņi ir:-
- Iepriekšēja analīze.
- Aizmugurējā analīze.
Iepriekšēja analīze
Prior ir algoritma analīzes metode, kas koncentrējas uz algoritma veiktspējas novērtēšanu, pamatojoties uz tā matemātiskajām īpašībām, faktiski neizpildot algoritmu.
Šī pieeja ļauj analizēt algoritmu un citu metrikas laika un telpas sarežģītību bez nepieciešamības ieviest un palaist algoritmus.
Aizmugurējā analīze
No otras puses, aizmugurējā analīze ir algoritma analīzes metode, kas faktiski izpilda algoritmu un mēra tā veiktspēju.
Šī pieeja sniedz precīzāku un detalizētāku informāciju par algoritma veiktspēju, taču tai ir nepieciešama algoritma ieviešana un izpilde.
Algoritma sarežģītība
Algoritmiskā sarežģītība ir algoritma efektivitātes un veiktspējas mērījums. Algoritmus parasti novērtē, ņemot vērā laiku un telpu, kas nepieciešams problēmas risināšanai vai noteikta mērķa sasniegšanai.
Algoritma sarežģītībā tiek izmantoti divi faktori.
viņi ir:-
- Laika faktors.
- Kosmosa faktors.
Laika faktors
- Laiks, kas algoritmam nepieciešams uzdevuma veikšanai, tiek saukts par laika sarežģītību. To parasti mēra pēc operāciju vai darbību skaita, kas algoritmam jāveic, lai atrisinātu problēmu.
- Algoritma laika sarežģītība ir svarīga, jo tā nosaka, cik ilgs laiks nepieciešams, lai to izpildītu, un tas var būtiski ietekmēt programmas un sistēmas veiktspēju.
- Algoritma laika sarežģītību var izteikt, izmantojot Big O apzīmējumu, veidu, kā izteikt algoritma laika sarežģītības augšējo robežu.
- Algoritms ar laika sarežģītību O(n) nozīmē, ka algoritma izpildei nepieciešamais laiks ir tieši proporcionāls ievades datu lielumam (n).
- Citas izplatītas laika sarežģītības ir O(n^2) kvadrātiskā sarežģītība un O(log n) logaritmiskā sarežģītība.
Kosmosa analīze
- No otras puses, telpas sarežģītība attiecas uz atmiņas vai krātuves apjomu, kas nepieciešams algoritma izpildei.
- Tas ir svarīgi, jo tas nosaka nepieciešamo resursu skaitu, lai palaistu algoritmus, kas var ietekmēt jūsu lietojumprogrammas vai sistēmas vispārējo veiktspēju.
- Ja algoritma telpas sarežģītība ir O(n), tas izmanto atmiņas apjomu, kas lineāri pieaug līdz ar ievades lielumu.
- Ja algoritmam ir O(1) telpas sarežģītība, tas izmanto fiksētu atmiņas apjomu neatkarīgi no ievades lieluma.
Kā uzrakstīt algoritmu
1. Vispirms definējiet problēmu, kuru vēlaties atrisināt ar algoritmu.
Piemēram, pieņemsim, ka mēs vēlamies uzrakstīt algoritmu, lai atrastu maksimālo vērtību no skaitļu saraksta.
2. Sadaliet problēmu mazākās, pārvaldāmās darbībās.
- Inicializējiet mainīgo “max” līdz pirmajai vērtībai sarakstā.
- Katrai nākamajai vērtībai sarakstā salīdziniet ar 'max'.
- Ja vērtība ir lielāka par “max”, iestatiet “max” uz šo vērtību.
- Turpiniet to darīt, līdz ir salīdzinātas visas sarakstā esošās vērtības.
- Atgriež galīgo “maksimālo” vērtību.
3. Uzrakstiet savu algoritmu pseidokodā vai programmēšanas valodā.
Algoritms, kas rakstīts pseido kodā:
MAX (list) max = list[0] For i = 1 the length of the list list IF[i] > max max = list[i] End for Maximum return Maximum end
4. Pārbaudiet savu algoritmu, lai pārliecinātos, ka tas ir pareizs un efektīvs.
Algoritmu var pārbaudīt, ievadot dažādus skaitļu sarakstus un pārbaudot, vai tas atgriež maksimālo pareizo vērtību. Varat arī analizēt sava algoritma laika sarežģītību, lai noteiktu, cik labi tas tiek mērogots lielākai ievadei.
Piemērs:-
Ievade: [1, 5, 2, 7, 3]
Izvade: 7.
Paskaidrojums: 7 ir maksimālā vērtība sarakstā.
5. Optimizējiet algoritmu.
Meklējiet veidus, kā optimizēt algoritmus, lai padarītu tos ātrākus un efektīvākus. Tas var ietvert pseidokoda modificēšanu vai efektīvāku datu struktūru vai algoritmu ieviešanu.
Algoritmu rakstīšanas pamatprincipi
Piemērs: - divu veselu skaitļu summa.
1. darbība - Sāc
2. darbība - Deklarē trīs veselus skaitļus a, b, c
3. darbība - Definējiet a un b vērtības
4. darbība - Pievienojiet a un b vērtības
5. darbība - Saglabājiet 4. darbības izvadi sadaļā c
6. darbība - Drukāt c
7. darbība - Beidz
C valodā izmantoto algoritmu veids.
1. Šķirošanas algoritmi
C nodrošina bagātīgu datu tipu un operatoru kopu, ko var izmantot dažādu šķirošanas algoritmu ieviešanai, piemēram, burbuļu kārtošanai, ievietošanas kārtošanai un ātrai kārtošanai.
Šie algoritmi ir noderīgi daudzās lietojumprogrammās, jo tos var izmantot dažāda lieluma un veida datu kārtošanai.
Ir dažādi šķirošanas algoritmi.
viņi ir:-
(i) Burbuļu kārtošana: Vienkāršs šķirošanas algoritms, kas atkārtoti salīdzina tuvumā esošās sastāvdaļas un izslēdz tos, ja tie nav kārtībā.
Burbuļu kārtošanas algoritms ir šāds:
- Sāciet ar nešķirotu elementu sarakstu.
- Salīdziniet pirmos divus elementus sarakstā. Ja pirmais elements ir lielāks par otro elementu, nomainiet tos.
- Pārejiet uz nākamo elementu pāri un atkārtojiet 2. darbību, līdz ir sasniegts saraksta beigas.
- Katram saraksta vienumam atkārtojiet 2. un 3. darbību vēlreiz. kas tiek saukta par caurlaidēm.
- Atkārtojiet 2.-4. darbību visam sarakstam. Atkārtojot gājienus, elementi “burbuļos” līdz pareizajai pozīcijai sakārtotajā sarakstā.
- Kad caurlaide ir pabeigta un mijmaiņas darījumi netiek veikti, saraksts tiek sakārtots, un algoritms var apstāties.
- Tiek atgriezts galīgais sakārtotais saraksts.
(ii) ievietošanas kārtošana : kārtošanas metode, kas izveido sakārtotu sarakstu pa vienam atsevišķam elementam, katru ievietojot attiecīgajā vietā.
Ievietošanas kārtošanas algoritms ir šāds:
- Inicializējiet tukšu kārtoto sarakstu un nešķirotu kārtojamo elementu sarakstu.
- Pirmais dalībnieks no nešķirotā saraksta ir jāņem un jāievieto atbilstošā pozīcijā sakārtotajā sarakstā.
- Atkārtojiet 2. darbību katram nākamajam nešķirotā saraksta elementam.
- Salīdziniet pašreizējo elementu ar elementiem sakārtotajā sarakstā, sākot ar elementu tieši pa kreisi.
- Apmainiet divus elementus, ja pašreizējais elements ir mazāks par elementu pa kreisi.
- Ja pašreizējais elements ir lielāks par elementu pa kreisi, ievietojiet to pareizajā vietā sakārtotajā sarakstā.
- Atkārtojiet 4.–6. darbību katram nākamajam nešķirotā saraksta elementam.
- Kad visi elementi ir apstrādāti, sakārtotajā sarakstā būs visi elementi pareizā secībā.
- Šķirošanas process ir pabeigts.
(iii) Atlases kārtošana : kārtošanas metode, kas konsekventi sāk sakārtoto sarakstu ar mazāko detaļu no nesakārtotā saraksta.
Atlases kārtošanas algoritms ir šāds:
- Sāciet, iestatot primāro saraksta elementu kā minimālo elementu.
- Atkārtojiet pārējos saraksta vienumus, salīdzinot katru ar pašreizējo minimumu.
- Iestatiet jaunu minimumu, ja tiek konstatēts, ka elements ir mazāks par esošo.
- Mainiet pašreizējo minimumu uz pirmo saraksta elementu ikreiz, kad tas ir noslēdzies.
- Atlikušajai nešķirotajai saraksta daļai atkārtojiet 2.–4. darbību, bet sāciet ar otro saraksta vienumu (jo pirmais elements jau ir sakārtots).
- Turpiniet kārtot sarakstu šādā veidā, līdz tas viss ir sakārtots.
(iv) Ātrā šķirošana : šķirošanas algoritms sadali un pārvaldi, kas izvēlas rakurstacijas elementu un sadala sarakstu apakšsarakstos atkarībā no tā, vai elementu skaits ir mazāks vai vairāk nekā rakurs. Pēc tam apakšsaraksti tiek kārtoti atkārtoti, līdz tiek sakārtots pilns saraksts.
Ātrās kārtošanas algoritms ir šāds:
- Sarakstā izvēlieties pagrieziena elementu. Parasti tas ir pirmais elements, taču tas var būt arī nejaušs elements vai saraksta mediāna.
- Sadaliet sarakstu divos apakšsarakstos: viens satur elementus, kas ir mazāki par rakurpunktu, un viens satur elementus, kas ir lielāki par rakurpunktu.
- Rekursīvi kārtojiet apakšsarakstu, kurā ir mazāki elementi nekā rakurs, izmantojot to pašu procesu.
- Izmantojiet to pašu procedūru, lai rekursīvi kārtotu to ierakstu apakšsarakstu, kas ir lielāki par rakurpunktu.
- Savienojiet sakārtotos apakšsarakstus ar šarnīra elementu starp tiem, lai izveidotu pilnībā sakārtotu sarakstu.
- Atgriezt pilnībā sakārtoto sarakstu.
(v) Lote iet : sadalīšanas un iekarošanas kārtošanas algoritms sadala sarakstu divās daļās, sakārto katru pusi un pēc tam apvieno abas daļas sakārtotā secībā.
Sapludināšanas kārtošanas algoritms:
uzlabota cilpai java
- No saraksta izveidojiet divus apakšsarakstus: vienu ar elementiem zem rakursa un otru ar elementiem virs rakursa.
- Izveido jaunu sakārtotu apakšsarakstu, iteratīvi sapludinot apakšsarakstus, līdz ir tikai viens apakšsaraksts. Šis būs jūsu sakārtotais saraksts.
- Darbības, lai apvienotu divus apakšdirektorijus:
- Izveidojiet tukšu sarakstu, lai saglabātu sakārtotos elementus.
- Salīdzina katra apakšsaraksta pirmo elementu.
- Jaunajam sarakstam pievieno mazāko elementu un noņem to no vecāksaraksta.
- Atkārtojiet 2. un 3. darbību, līdz saraksts ir pilnībā tukšs.
- Pievieno atlikušos elementus no citiem apakšsarakstiem jaunam sarakstam.
- Aizstāj sapludināto apakšsarakstu ar jauno sakārtoto sarakstu.
- Atkārtojiet šo procesu, līdz visi apakšsaraksti ir apvienoti vienā sakārtotā sarakstā.
(vi) Kaudzes kārtošana : šķirošanas algoritms, kas kārto elementus, izmantojot datu struktūru, ko sauc par kaudzi.
Šis ir klasifikācijas algoritms:
- Salieciet pārējos elementus. Sākot no saknes, katrs mezgls tiek salīdzināts ar saviem bērniem, mainot mezglus ar vecākiem bērniem, līdz tiek apmierināts maksimālais kaudzes rekvizīts.
- Atkārtojiet 2. un 3. darbību ar tikko sakrautajiem elementiem, izņemot pēdējo elementu pareizajā pozīcijā.
- Atkārtojiet šo procesu, līdz kaudzē paliek tikai viens elements. Tagad tas ir sakārtots.
(vii) Radix šķirošana : šķirošanas algoritms, kas kārto elementus, pamatojoties uz to binārā attēlojuma cipariem vai cipariem.
Radix kārtošanas algoritms ir šāds:
- noteikt, cik ciparu ir iekļauts ievades saraksta lielākajā elementā.
- Inicializējiet mainīgo, piemēram, cipara vietu, uz 1, kas apzīmē pašreizējo cipara vietu.
- Katrai iespējamai cipara vērtībai no 0 līdz 9 izveidojiet tukšu sarakstu.
- Atkārtojiet ievades sarakstu un pievienojiet katru elementu atbilstošajam sarakstam, pamatojoties uz pašreizējās cipara vietas vērtību.
- Savienojiet visus sarakstus kopā, lai izveidotu jaunu sarakstu ciparu sarakstu secībā.
- Reiziniet digitPlace ar 10, lai pārietu uz nākamo cipara vietu.
- Atkārtojiet 4.–6. darbību katrai cipara vietai, līdz ir ņemti vērā visi cipari lielākajā elementā.
- Galīgais saraksts tiks sakārtots augošā secībā pēc elementu cipariem.
- Atgriezt galīgo sakārtoto sarakstu.
2. Meklēšanas algoritmi
C nodrošina arī rīkus, kas nepieciešami, lai ieviestu dažādus meklēšanas algoritmus, piemēram, lineāro meklēšanu un bināro meklēšanu. Šie algoritmi var ātri atrast konkrētus vienumus datu kopā, padarot tos noderīgus plašam lietojumu klāstam.
Ir daudz veidu meklēšanas algoritmi.
Viņi ir:-
(i) Lineārā meklēšana : pamata meklēšanas algoritms, kas pārbauda katru saraksta vienumu pa vienam, līdz atrod vajadzīgo vienumu.
Lineārās meklēšanas algoritms:
- Definējiet algoritma ievadi: Lineārās meklēšanas algoritma ievade ir elementu saraksts (vai masīvs) un mērķa elements, kuru mēs meklējam.
- Inicializējiet mainīgo ar nosaukumu 'index' uz -1: šis mainīgais tiks izmantots, lai saglabātu mērķa elementa indeksu, ja tas tiks atrasts.
- Pārlūkojiet elementu sarakstu: sākot no pirmā elementa, pārbaudiet katru elementu sarakstā pa vienam.
- Salīdziniet pašreizējo elementu ar vēlamo elementu novērtēšanai: saglabājiet pašreizējā elementa indeksu indeksa mainīgajā un izejiet no cilpas, ja mūsdienu elements un mērķa elements ir identiski.
- Atgriezt mērķa elementa indeksu: pēc cilpas pabeigšanas atgrieziet indeksa mainīgajā saglabāto vērtību. Ja mērķa elements netiek atrasts, indeksa vērtība būs -1.
(ii) Binārā meklēšana : Meklēšanas algoritms, kas darbojas, sadalot sarakstu uz pusēm un meklē šajās daļās, visticamāk, ietvers šo elementu.
Binārās meklēšanas algoritms:
- Ievade: sakārtots n elementu saraksts un mērķa elements x.
- Mainīgo inicializēšana: iestatiet zemo indeksu uz 0, augsto indeksu uz n-1 un vidējo uz (zems+augsts)/2.
- Sāciet cilpu: kamēr zemais indekss ir mazāks vai vienāds ar augsto indeksu, atkārtojiet tālāk norādītās darbības.
- Salīdziniet vidējo elementu ar x: ja vidējais elements ir vienāds ar x, atgrieziet vidējo indeksu.
- Atjauniniet zemo vai augsto indeksu: ja x ir lielāks par vidējo elementu, iestatiet zemo indeksu uz vidu + 1. Pretējā gadījumā iestatiet augsto indeksu uz vidu - 1.
- Atjauniniet vidējo rādītāju: vidējais = (zems+augsts)/2.
- Cikla beigas: ja zemais indekss ir lielāks par augsto indeksu, x nav sarakstā, un algoritms atgriež kļūmi.
- Izvade: x indekss sarakstā vai kļūmes ziņojumā.
(iii) Meklēšana pēc dziļuma : meklēšanas algoritms, kas pirms apgriešanās pārbauda katru atzaru, cik vien iespējams.
Šādas vadlīnijas attiecas uz meklēšanu pēc dziļuma:
- atlasiet grafika sākuma virsotni vai mezglu, ar kuru sākt.
- Pievienojiet apmeklējuma atzīmi pirmajai virsotnei.
- Tieši ievietojiet sākuma virsotni kaudzē.
- Līdz kaudze ir tukša, atkārtojiet šādas darbības: -
- Noņemiet kaudzes augšējo virsotni.
- Atzīmējiet kā apmeklētu un ievietojiet kaudzē katru neapmeklēto virsotnes kaimiņu.
- Turpiniet šo procesu, līdz ir apmeklētas visas grafa virsotnes.
- Kad visas virsotnes ir apmeklētas, algoritms ir pabeigts, un grafikā tiek veikta pirmā dziļuma meklēšana.
(iv) Meklēšana pēc platuma : meklēšanas algoritms, kas pirms pārejas uz nākamo līmeni izpēta visus mezgla kaimiņus.
Pirmās platuma meklēšanas algoritms ir:
- Sāciet ar saknes mezglu vai sākotnējo stāvokli.
- Pievienojiet saknes mezglu rindai.
- Pārbaudiet, vai rinda ir tukša; ja jā, tad pārtrauciet algoritmu.
- Paņemiet pirmo elementu no rindas un atzīmējiet to kā apmeklētu.
- Pastipriniet mūsdienu mezglu, pievienojot rindai visus tā neapmeklētos kaimiņus.
- Kamēr vēlamais mezgls nav atrasts vai rinda ir tukša, atkārtojiet 3. līdz 5. darbību.
- Ja mērķa mezgls ir atrasts, atgrieziet ceļu no sākotnējā stāvokļa uz mērķa stāvokli.
- Pārtrauciet noteikumu kopu un ziņojiet, ka mērķa stāvoklis nav identificēts, ja rinda ir tukša.
(v) Interpolācijas meklēšana : meklēšanas algoritms, kas izmanto meklēto elementu vērtības, lai novērtētu pozīciju indeksā.
Ir svarīgi, lai masīvs būtu vienmērīgi sadalīts. Pretējā gadījumā tas ir algoritms.
Tas darbojas, kā paredzēts.
Algoritmu var apkopot šādi.
- Iegūstiet ievades sarakstu un atslēgas vērtību, lai meklētu.
- Inicializējiet apakšējo un augšējo mainīgo saraksta pirmajā un pēdējā rādītājā.
- Ja zemākā vērtība ir mazāka vai vienāda ar augstāku vērtību, tad:-
- Aprēķiniet aptuveno atrašanās vietu, izmantojot šādu formulu:
poz = zems + ((augsts - zems) / (arr[high] - arr[zems])) * (x - arr[zems]). - Atgrieziet pozīciju, ja aptuvenā pozīcijas vērtība ir galvenā vērtība.
- c) Ja aptuvenā pozīcijas vērtība ir mazāka par atslēgas vērtību, iestatiet to zemāku.
Pozīcija + 1. - d) Ja aprēķinātās pozīcijas vērtība ir lielāka par atslēgas Iestatīšanas vērtību, pozīcija - 1 uz augšu.
- Aprēķiniet aptuveno atrašanās vietu, izmantojot šādu formulu:
- Ja atslēgas vērtība nav atrasta, atgrieziet -1, lai norādītu, ka vērtība nav sarakstā.
(vi) Pārlēkta meklēšana : meklēšanas metode, kas atkārto sarakstu ar nemainīga garuma soļiem, līdz atrod attiecīgo elementu vai nosaka, ka tā vairs nav.
Lēciena meklēšanas algoritms ir šāds:
- Vispirms iestatiet lēciena lielumu uz kvadrātsakni no masīva elementu skaita.
- Iestata mainīgo ar nosaukumu 'current' uz pirmo masīva elementu.
- Atkārtojas pāri masīvam, pārlecot pēc lēciena lieluma, vienlaikus palielinot mainīgo, ko sauc par “lēcienu”.
- Pārejiet uz nākamo lēcienu, ja esošais elements ir mazāks par vēlamo elementu.
- Ja pašreizējais elements ir lielāks par mērķa elementu, veiciet lineāru meklēšanu starp pašreizējo un iepriekšējo lēciena elementu, lai atrastu mērķa elementu.
- Ja mērķa elements masīvā nav atrasts, tas atgriež -1, lai norādītu, ka tas nav masīvā.
- Ja elements tiek atrasts, tas atgriež elementa indeksu masīvā.
3. Grafu algoritmi
C atbalsts rādītājiem un datu struktūrām, piemēram, masīviem un saistītiem sarakstiem, padara to piemērotu tādu algoritmu ieviešanai, kas manipulē ar grafikiem, piemēram, lai atrastu īsāko ceļu starp diviem diagrammas mezgliem.
Ir dažādi grafiku algoritmu veidi.
viņi ir:-
4. Kriptogrāfiskie algoritmi
C atbalsta zema līmeņa darbības un efektīvu datu manipulāciju, padarot to ideāli piemērotu kriptogrāfijā izmantoto algoritmu, piemēram, datu šifrēšanas un atšifrēšanas algoritmu, ieviešanai.
Ir dažādi šifrēšanas algoritmu veidi.
Viņi ir:-
Algoritma priekšrocības
Algoritmiem ir daudz priekšrocību.
viņi ir:-
Algoritma trūkumi
Algoritmi ir ļoti noderīgi programmēšanai, taču algoritmiem ir trūkumi.
viņi ir:-