Algoritmas yra instrukcijų seka, kuri atliekama iš anksto nustatyta seka, siekiant išspręsti problemą arba užbaigti darbą. Funkcija yra kodo blokas, kurį galima iškviesti ir vykdyti iš kitų programos dalių.
Instrukcijų rinkinys, kaip išspręsti problemą arba atlikti tam tikrą veiklą. Informatikos moksle algoritmai naudojami įvairioms operacijoms – nuo pagrindinės matematikos iki sudėtingo duomenų apdorojimo.
Vienas iš įprastų C naudojamų algoritmų yra rūšiavimo algoritmas. Rūšiavimo algoritmas sutvarko elementų rinkinį tam tikra tvarka, pavyzdžiui, skaitiniais arba abėcėlės tvarka.
Yra daug rūšiavimo algoritmų, kurių kiekvienas turi privalumų ir trūkumų. Dažniausi C rūšiavimo algoritmai yra greitas rūšiavimas, sujungimas ir rūšiavimas.
Viena iš pagrindinių C savybių yra rodyklės palaikymas. Tai leidžia efektyviai manipuliuoti duomenų struktūromis, pvz., masyvais, eilėmis ir tt. Dėl to jis tinkamas įgyvendinti algoritmus, kuriems reikalingas sudėtingas duomenų apdorojimas, pvz., rūšiavimas ir algoritminė paieška.
Vienas garsiausių programinės įrangos bibliotekos, įdiegtos C, pavyzdžių yra standartinė šablonų biblioteka (STL). Ši biblioteka siūlo daugybę algoritmų, skirtų tokioms užduotims kaip rūšiavimas, paieška ir duomenų struktūrų manipuliavimas.
Algoritmo ypatybės
Jis apibrėžia keletą svarbių algoritmo ypatybių, įskaitant:
Algoritmo analizė
Algoritminė analizė – tai procesas, kurio metu vertinamas algoritmo veikimas pagal efektyvumą, sudėtingumą ir kitus kriterijus. Paprastai tai atliekama siekiant įvertinti daugelį algoritmų ir parinkti optimalų tam tikros problemos ar programinės įrangos sprendimą.
Algoritmų analizė paprastai apima jų laiko ir erdvės sudėtingumo matavimą.
Kaip ir erdvės sudėtingumo atveju, kuris apibūdina reikalingą atminties ar vietos diske kiekį, laiko sudėtingumas apibūdina, kiek laiko algoritmas nustato užduočiai atlikti.
Yra įvairių būdų, kaip analizuoti algoritmų sudėtingumą, pvz., Big O ir Omega žymėjimą. Omega simbolis nurodo viršutinę algoritmo laiko sudėtingumo ribą, o Omega simbolis – apatinę ribą.
Be laiko ir erdvės sudėtingumo matavimo, algoritmų analizė taip pat apima kitus kriterijus, tokius kaip stabilumas, lygiagretumas ir mastelio keitimas.
Jie apima dviejų tipų analizę.
jie yra:-
- Išankstinė analizė.
- Užpakalinė analizė.
Ankstesnė analizė
python programas
„Prior“ yra algoritmo analizės metodas, kurio tikslas – įvertinti algoritmo našumą, remiantis jo matematinėmis savybėmis, iš tikrųjų nevykdant algoritmo.
Šis metodas leidžia analizuoti algoritmų ir kitų metrikų laiko ir erdvės sudėtingumą, nereikia diegti ir paleisti algoritmų.
Užpakalinė analizė
Kita vertus, užpakalinė analizė yra algoritmų analizės metodas, kuris iš tikrųjų vykdo algoritmą ir matuoja jo veikimą.
Šis metodas suteikia tikslesnę ir išsamesnę informaciją apie algoritmo veikimą, tačiau reikalauja algoritmo įgyvendinimo ir vykdymo.
Algoritmo sudėtingumas
Algoritminis sudėtingumas yra matas, skirtas matuoti algoritmo efektyvumą ir našumą. Algoritmai paprastai vertinami atsižvelgiant į laiką ir erdvę, reikalingą problemai išspręsti arba konkrečiam tikslui pasiekti.
Algoritmo sudėtingumui naudojami du veiksniai.
jie yra:-
- Laiko faktorius.
- Erdvės faktorius.
Laiko faktorius
- Laikas, kurio algoritmui reikia atlikti užduotį, vadinamas laiko sudėtingumu. Paprastai jis matuojamas operacijų arba žingsnių skaičiumi, kurį algoritmas turi atlikti, kad išspręstų problemą.
- Algoritmo sudėtingumas laike yra svarbus, nes jis lemia, kiek laiko reikia vykdyti, ir gali turėti didelės įtakos programos ir sistemos veikimui.
- Algoritmo sudėtingumas laike gali būti išreikštas naudojant Big O žymėjimą – būdą išreikšti viršutinę algoritmo sudėtingumo laike ribą.
- Algoritmas, kurio laiko sudėtingumas O(n), reiškia, kad laikas, reikalingas algoritmui vykdyti, yra tiesiogiai proporcingas įvesties duomenų dydžiui (n).
- Kiti dažni laiko sudėtingumai yra O(n^2) kvadratinis sudėtingumas ir O(log n) logaritminis sudėtingumas.
Erdvės analizė
- Kita vertus, erdvės sudėtingumas reiškia atminties ar saugyklos vietos kiekį, reikalingą algoritmui vykdyti.
- Tai svarbu, nes jis nustato išteklių, reikalingų algoritmams, kurie gali turėti įtakos bendram jūsų programos ar sistemos veikimui, paleisti.
- Jei algoritmo erdvės sudėtingumas yra O(n), jis naudoja atminties kiekį, kuris auga tiesiškai didėjant įvesties dydžiui.
- Jei algoritmas turi O(1) erdvės sudėtingumą, jis naudoja fiksuotą atminties kiekį, neatsižvelgiant į įvesties dydį.
Kaip parašyti algoritmą
1. Pirmiausia apibrėžkite problemą, kurią norite išspręsti algoritmu.
Pavyzdžiui, tarkime, kad norime parašyti algoritmą, kad iš skaičių sąrašo rastume didžiausią reikšmę.
2. Suskaidykite problemą į mažesnius, valdomus veiksmus.
- Inicijuoti „max“ kintamąjį iki pirmosios sąrašo reikšmės.
- Kiekvieną paskesnę sąrašo reikšmę palyginkite su „max“.
- Jei vertė yra didesnė nei „max“, nustatykite „max“ į tą reikšmę.
- Tęskite tai, kol bus palygintos visos sąrašo reikšmės.
- Grąžina galutinę „max“ vertę.
3. Parašykite savo algoritmą pseudokodu arba programavimo kalba.
Algoritmas parašytas pseudo kodu:
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. Išbandykite savo algoritmą, kad įsitikintumėte, jog jis teisingas ir efektyvus.
Algoritmą galite išbandyti įvesdami skirtingus skaičių sąrašus ir patikrindami, ar jis pateikia maksimalią teisingą reikšmę. Taip pat galite išanalizuoti savo algoritmo sudėtingumą laiku, kad nustatytumėte, kaip jis pritaikytas didesnėms įvestims.
Pavyzdys:-
skaičiuoti atskirą sql
Įvestis: [1, 5, 2, 7, 3]
Išėjimas: 7.
Paaiškinimas: 7 yra didžiausia sąrašo reikšmė.
5. Optimizuokite algoritmą.
Ieškokite būdų, kaip optimizuoti algoritmus, kad jie būtų greitesni ir efektyvesni. Tai gali apimti pseudokodo modifikavimą arba efektyvesnių duomenų struktūrų ar algoritmų įgyvendinimą.
Pagrindinis algoritmų rašymas
Pavyzdys: - dviejų sveikųjų skaičių suma.
1 žingsnis - Pradėti
2 žingsnis - Paskelbkite tris sveikuosius skaičius a, b, c
3 veiksmas - Apibrėžkite a ir b reikšmes
4 veiksmas - Sudėkite a ir b reikšmes
5 veiksmas - Išsaugokite c 4 veiksmo išvestį
6 veiksmas - Spausdinti c
7 veiksmas - Sustabdyti
C kalba naudojamų algoritmų tipas.
1. Rūšiavimo algoritmai
C pateikia gausų duomenų tipų ir operatorių rinkinį, kurį galima naudoti įgyvendinant įvairius rūšiavimo algoritmus, tokius kaip burbulų rūšiavimas, įterpimo rūšiavimas ir greitas rūšiavimas.
Šie algoritmai yra naudingi daugelyje programų, nes juos galima naudoti rūšiuojant įvairaus dydžio ir tipo duomenis.
Yra įvairių rūšiavimo algoritmų.
jie yra:-
(i) Burbulų rūšiavimas: Nesudėtingas rūšiavimo algoritmas, kuris pakartotinai lygina netoliese esančius komponentus ir išjungia juos, jei jie neveikia.
Burbulų rūšiavimo algoritmas yra toks:
- Pradėkite nuo nerūšiuoto elementų sąrašo.
- Palyginkite pirmuosius du sąrašo elementus. Jei pirmasis elementas yra didesnis už antrąjį, pakeiskite juos.
- Pereikite prie kitos elementų poros ir kartokite 2 veiksmą, kol pasieksite sąrašo pabaigą.
- Kiekvienam sąrašo elementui dar kartą pakartokite 2 ir 3 veiksmus. tai vadinama leidimais.
- Pakartokite 2–4 veiksmus visam sąrašui. Kai kartosite praėjimus, elementai „burbuliuos“ į tinkamą vietą surūšiuotame sąraše.
- Užbaigus leidimą ir neatlikus apsikeitimo, sąrašas surūšiuojamas ir algoritmas gali sustoti.
- Galutinis surūšiuotas sąrašas grąžinamas.
(ii) Įterpimo rūšiavimas : rūšiavimo metodas, kuris sukuria surūšiuotą sąrašą po vieną atskirą elementą, kiekvieną įdėdamas į atitinkamą vietą.
Įterpimo rūšiavimo algoritmas yra toks:
- Inicijuoti tuščią surūšiuotą sąrašą ir nerūšiuotą elementų, kuriuos reikia rūšiuoti, sąrašą.
- Pirmas narys iš nerūšiuoto sąrašo turi būti paimtas ir patalpintas į atitinkamą vietą surūšiuotame sąraše.
- Pakartokite 2 veiksmą kiekvienam paskesniam nerūšiuoto sąrašo elementui.
- Palyginkite esamą elementą su surūšiuoto sąrašo elementais, pradėdami nuo elemento iš karto kairėje.
- Sukeiskite du elementus, jei dabartinis elementas yra mažesnis už elementą kairėje.
- Jei dabartinis elementas yra didesnis nei elementas, esantis jo kairėje, įterpkite jį į tinkamą vietą surūšiuotame sąraše.
- Pakartokite 4–6 veiksmus kiekvienam paskesniam nerūšiuoto sąrašo elementui.
- Kai visi elementai bus apdoroti, surūšiuotame sąraše bus visi elementai tinkama tvarka.
- Rūšiavimo procesas baigtas.
(iii) atrankos rūšiavimas : rūšiavimo metodas, kuris nuosekliai pradeda surūšiuotą sąrašą su mažiausia detale iš netvarkingo sąrašo.
Pasirinkimo rūšiavimo algoritmas yra toks:
- Pradėkite nustatydami pirminį sąrašo elementą kaip minimalų elementą.
- Pakartokite per likusius sąrašo elementus, palygindami kiekvieną su esamu minimumu.
- Nustatykite naują minimumą, jei nustatoma, kad elementas yra mažesnis už esamą.
- Pakeiskite esamą minimumą į pirmąjį sąrašo elementą, kai tik jis padaro išvadą.
- Likusiai nerūšiuotai sąrašo daliai pakartokite 2–4 veiksmus, bet pradėkite nuo antrojo sąrašo elemento (nes pirmasis elementas jau surūšiuotas).
- Tęskite sąrašo rūšiavimą tokiu būdu, kol jis bus surūšiuotas.
(iv) Greitas rūšiavimas : rūšiavimo „skaldyk ir užkariauk“ algoritmas, parenkantis suvestinį elementą ir padalijantis sąrašą į posąraščius, atsižvelgiant į tai, ar elementų yra mažiau ar daugiau nei suvestinis elementas. Po to antriniai sąrašai rūšiuojami pakartotinai, kol surūšiuojamas visas sąrašas.
Greito rūšiavimo algoritmas yra toks:
- Iš sąrašo pasirinkite pasukimo elementą. Paprastai tai yra pirmasis elementas, tačiau jis taip pat gali būti atsitiktinis elementas arba sąrašo mediana.
- Padalinkite sąrašą į du posąraščius: viename yra elementų, mažesnių už suvestinę, o kitame yra elementų, didesnių už suvestinę.
- Rekursyviai rūšiuokite posąrašį, kuriame yra mažiau elementų nei suvesti, naudodami tą patį procesą.
- Naudokite tą pačią procedūrą, kad rekursyviai surūšiuotumėte didesnių nei suvestinės įrašų posąrašį.
- Sujunkite surūšiuotus posąraščius su sukimo elementu, kad sudarytumėte visiškai surūšiuotą sąrašą.
- Grąžinti visiškai surūšiuotą sąrašą.
(v) Daug eina : „Skaldyk ir užkariauk“ rūšiavimo algoritmas padalija sąrašą į dvi dalis, surūšiuoja kiekvieną pusę ir sujungia dvi dalis rūšiavimo tvarka.
Sujungimo-rūšiavimo algoritmas:
- Iš sąrašo sudarykite du posąraščius: vieną su elementais po suvestinės ir kitą su elementais virš suvestinės.
- Sukuria naują surūšiuotą posąrašį iteratyviai sujungdama posąraščius, kol bus tik vienas posąrašas. Tai bus jūsų surūšiuotas sąrašas.
- Dviejų pakatalogių sujungimo veiksmai:
- Sukurkite tuščią sąrašą, kuriame bus surūšiuoti elementai.
- Palygina pirmąjį kiekvieno posąrašo elementą.
- Prideda mažesnį elementą prie naujo sąrašo ir pašalina jį iš pirminio posąrašo.
- Kartokite 2 ir 3 veiksmus, kol sąrašas bus visiškai tuščias.
- Prideda likusius elementus iš kitų subsąrašų į naują sąrašą.
- Pakeičia sujungtą posąrašį nauju surūšiuotu sąrašu.
- Kartokite šį procesą, kol visi posąraščiai bus sujungti į vieną surūšiuotą sąrašą.
(vi) Rūšiuoti krūvą : rūšiavimo algoritmas, rūšiuojantis elementus naudodamas duomenų struktūrą, vadinamą krūva.
Tai yra klasifikavimo algoritmas:
- Sudėkite likusius elementus. Pradedant nuo šaknies, kiekvienas mazgas lyginamas su savo vaikais, keičiant mazgus su vyresniais vaikais, kol bus patenkinta maksimali krūvos savybė.
- Pakartokite 2 ir 3 veiksmus su naujai sukrautais elementais, išskyrus paskutinį elementą tinkamoje padėtyje.
- Kartokite šį procesą, kol krūvoje liks tik vienas elementas. Tai dabar surūšiuota.
(vii) Radix rūšiavimas : rūšiavimo algoritmas, rūšiuojantis elementus pagal jų dvejetainio atvaizdo skaitmenis arba skaitmenis.
Radix rūšiavimo algoritmas yra toks:
Java 8
- nustatyti, kiek skaitmenų yra didžiausiame įvesties sąrašo elemente.
- Inicijuokite kintamąjį, tarkime, skaitmenų vietą, į 1, kuris reiškia dabartinę skaitmenų vietą.
- Sukurkite tuščią sąrašą kiekvienai galimai skaitmens vertei nuo 0 iki 9.
- Pakartokite įvesties sąrašą ir pridėkite kiekvieną elementą į atitinkamą sąrašą pagal dabartinės skaitmenų vietos reikšmę.
- Sujunkite visus sąrašus, kad sudarytumėte naują sąrašą skaitmenų sąrašų tvarka.
- Padauginkite digitPlace iš 10, kad pereitumėte į kitą skaitmens vietą.
- Kartokite 4–6 veiksmus kiekvienai skaitmens vietai, kol atsižvelgsite į visus didžiausio elemento skaitmenis.
- Galutinis sąrašas bus surūšiuotas didėjimo tvarka pagal elementų skaitmenis.
- Grąžinti galutinį surūšiuotą sąrašą.
2. Paieškos algoritmai
C taip pat pateikia įrankius, reikalingus įvairiems paieškos algoritmams, pvz., tiesinei paieškai ir dvejetainei paieškai, įgyvendinti. Šie algoritmai gali greitai rasti konkrečius elementus duomenų rinkinyje, todėl jie gali būti naudingi įvairioms programoms.
Yra daugybė paieškos algoritmų tipų.
Jie yra:-
(i) Linijinė paieška : pagrindinis paieškos algoritmas, kuris tiria kiekvieną sąrašo elementą po vieną, kol randa norimą elementą.
Linijinės paieškos algoritmas:
- Apibrėžkite algoritmo įvestį: Linijinės paieškos algoritmo įvestis yra elementų sąrašas (arba masyvas) ir tikslinis elementas, kurio ieškome.
- Inicijuoti kintamąjį, vadinamą „index“, į -1: šis kintamasis bus naudojamas tikslinio elemento indeksui išsaugoti, jei jis bus rastas.
- Peržvelkite elementų sąrašą: Pradėdami nuo pirmojo elemento, patikrinkite kiekvieną sąrašo elementą po vieną.
- Palyginkite esamą elementą su norimu vertinimui: Dabartinio elemento indeksą palikite indekso kintamajame ir išeikite iš ciklo, jei modernus elementas ir tikslo elementas yra identiški.
- Grąžinti tikslinio elemento indeksą: Kai ciklas bus baigtas, grąžinkite vertę, saugomą indekso kintamajame. Jei tikslinis elementas nerastas, indekso reikšmė bus -1.
(ii) dvejetainė paieška : labiau tikėtina, kad paieškos algoritmas, kuris padalija sąrašą į dalis ir ieškos tose pusėse, apims elementą.
Dvejetainės paieškos algoritmas:
- Įvestis: surūšiuotas n elementų sąrašas ir tikslinis elementas x.
- Inicijuoti kintamuosius: žemą indeksą nustatykite į 0, aukštą indeksą į n-1, o vidutinį į (žemas+aukštas)/2.
- Pradėkite kilpą: kol žemas indeksas yra mažesnis arba lygus aukštam indeksui, pakartokite šiuos veiksmus.
- Palyginkite vidurinį elementą su x: jei vidurinis elementas yra lygus x, grąžinkite vidurio indeksą.
- Atnaujinkite žemą arba aukštą indeksą: jei x yra didesnis už vidutinį elementą, nustatykite žemą indeksą į vidutinį + 1. Kitu atveju nustatykite aukštą indeksą į vidutinį – 1.
- Atnaujinkite vidutinį indeksą: Vidutinis = (žemas+aukštas)/2.
- Ciklo pabaiga: jei žemas indeksas yra didesnis už aukštą, vadinasi, x nėra sąraše, o algoritmas grąžina gedimą.
- Išvestis: x indeksas sąraše arba gedimo pranešime.
iii) paieška pagal gylį : paieškos algoritmas, kuris kiek įmanoma ištiria kiekvieną šaką prieš apsisukdamas.
Šios gairės taikomos atliekant giluminę paiešką:
- pasirinkite pradinę grafiko viršūnę arba mazgą, nuo kurio norite pradėti.
- Pridėkite apsilankymo ženklą prie pirmosios viršūnės.
- Tiesiogiai įdėkite pradinę viršūnę į krūvą.
- Kol krūva bus tuščia, kartokite šiuos veiksmus: -
- Pašalinkite rietuvės viršutinę viršūnę.
- Pažymėkite kaip aplankytą ir įdėkite į krūvą kiekvieną nelankytą iššokusios viršūnės kaimyną.
- Tęskite šį procesą, kol aplankysite visas grafiko viršūnes.
- Kai visos viršūnės yra aplankytos, algoritmas baigiamas ir grafe atliekama pirmoji gylio paieška.
iv) paieška pagal plotį : paieškos algoritmas, kuris ištiria visus mazgo kaimynus prieš pereinant į kitą lygį.
Paieškos pagal plotį algoritmas yra toks:
- Pradėkite nuo šakninio mazgo arba pradinės būsenos.
- Įtraukite šakninį mazgą į eilę.
- Patikrinkite, ar eilė tuščia; jei taip, nutraukite algoritmą.
- Paimkite pirmąjį elementą iš eilės ir pažymėkite jį kaip aplankytą.
- Padidinkite šiuolaikinį mazgą įtraukdami į eilę visus jo nelankytus kaimynus.
- Kol bus rastas norimas mazgas arba eilė bus tuščia, kartokite 3–5 veiksmus.
- Grąžinkite kelią iš pradinės būsenos į tikslinę būseną, jei tikslo mazgas rastas.
- Nutraukite taisyklių rinkinį ir praneškite, kad tikslo būsena nebuvo nustatyta, jei eilė tuščia.
v) Interpoliacijos paieška : paieškos algoritmas, kuris naudoja ieškomų elementų reikšmes, kad įvertintų poziciją indekse.
kortele java
Svarbu, kad masyvas būtų tolygiai paskirstytas. Priešingu atveju tai yra algoritmas.
Veikia taip, kaip tikėtasi.
Algoritmą galima apibendrinti taip.
- Norėdami ieškoti, gaukite įvesties sąrašą ir rakto reikšmę.
- Pirmajame ir paskutiniame sąrašo indeksuose inicijuokite apatinį ir viršutinį kintamuosius.
- Jei apatinė vertė yra mažesnė arba lygi didesnei vertei, tada:-
- Apskaičiuokite numatomą vietą pagal šią formulę:
poz = žemas + ((aukštas - žemas) / (arr[aukštas] - rodyklė[žemas])) * (x - arr[žemas]). - Grąžinkite poziciją, jei apskaičiuota padėties reikšmė yra pagrindinė reikšmė.
- c) Jei apskaičiuota padėties reikšmė mažesnė už rakto reikšmę, nustatykite ją mažesnę.
Padėtis + 1. - d) Jei numatomos padėties reikšmė yra didesnė už rakto Nustatyti reikšmę, padėtis - 1 aukštyn.
- Apskaičiuokite numatomą vietą pagal šią formulę:
- Jei rakto reikšmė nerasta, grąžinkite -1, kad nurodytumėte, jog reikšmės sąraše nėra.
(vi) Peršokimo paieška : paieškos metodas, kartojantis sąrašą pastovaus ilgio žingsniais, kol randa atitinkamą elementą arba nustato, kad jo nebėra.
Šuolio paieškos algoritmas yra toks:
- Pirmiausia nustatykite šuolio dydį į kvadratinę šaknį iš masyvo elementų skaičiaus.
- Nustato kintamąjį pavadinimu „current“ į pirmąjį masyvo elementą.
- Kartojama per masyvą, šokinėjant pagal šuolio dydį, tuo pačiu didinant kintamąjį, vadinamą „šuoliu“.
- Jei esamas elementas yra mažesnis už norimą elementą, pereikite prie kito šuolio.
- Jei dabartinis elementas yra didesnis nei tikslinis elementas, atlikite tiesinę paiešką tarp dabartinio elemento ir ankstesnio šuolio elemento, kad rastumėte tikslinį elementą.
- Jei tikslinio elemento masyve nerasta, jis grąžina -1, nurodydamas, kad jo nėra masyve.
- Jei elementas randamas, jis grąžina elemento indeksą masyve.
3. Grafiniai algoritmai
C palaikymas rodyklėms ir duomenų struktūroms, pvz., masyvams ir susietiems sąrašams, leidžia įgyvendinti algoritmus, kurie manipuliuoja grafikais, pvz., ieškant trumpiausio kelio tarp dviejų grafiko mazgų.
Yra įvairių tipų grafų algoritmai.
jie yra:-
4. Kriptografiniai algoritmai
C palaiko žemo lygio operacijas ir efektyvų duomenų apdorojimą, todėl idealiai tinka kriptografijoje naudojamiems algoritmams, pvz., duomenų šifravimo ir iššifravimo algoritmams, įgyvendinti.
Yra įvairių tipų šifravimo algoritmai.
Jie yra:-
Algoritmo privalumai
Algoritmai turi daug privalumų.
jie yra:-
Algoritmo trūkumai
Algoritmai yra labai naudingi programuojant, tačiau algoritmai turi trūkumų.
jie yra:-