Algoritmus je postupnosť inštrukcií, ktoré sa vykonávajú vo vopred určenom poradí s cieľom vyriešiť problém alebo dokončiť prácu. Funkcia je blok kódu, ktorý možno volať a vykonávať z iných častí programu.
Súbor pokynov na vyriešenie problému alebo vykonanie určitej činnosti. V informatike sa algoritmy používajú na širokú škálu operácií, od základnej matematiky až po zložité spracovanie údajov.
Jedným z bežných algoritmov používaných v C je triediaci algoritmus. Algoritmus triedenia usporiada kolekciu položiek v určitom poradí, napríklad číselne alebo abecedne.
Existuje mnoho triediacich algoritmov, z ktorých každý má výhody a nevýhody. Najbežnejšie triediace algoritmy v C sú rýchle triedenie, zlúčenie a triedenie.
Jednou z kľúčových vlastností C je podpora ukazovateľa. To umožňuje efektívnu manipuláciu s dátovými štruktúrami, ako sú polia, fronty atď. Vďaka tomu je vhodný na implementáciu algoritmov, ktoré vyžadujú komplexnú manipuláciu s dátami, ako je triedenie a algoritmické vyhľadávanie.
Jedným zo slávnych príkladov softvérovej knižnice implementovanej v jazyku C je štandardná knižnica šablón (STL). Táto knižnica poskytuje širokú škálu algoritmov pre úlohy, ako je triedenie, vyhľadávanie a manipulácia s dátovými štruktúrami.
Vlastnosti algoritmu
Definuje niekoľko dôležitých funkcií algoritmu, vrátane:
Algoritmová analýza
Algoritmická analýza je proces hodnotenia výkonnosti algoritmu z hľadiska efektívnosti, zložitosti a iných kritérií. Zvyčajne sa to robí na vyhodnotenie mnohých algoritmov a výber optimálneho riešenia pre určitý problém alebo softvér.
Analýza algoritmov zvyčajne zahŕňa meranie ich časovej a priestorovej zložitosti.
Rovnako ako v prípade priestorovej zložitosti, ktorá popisuje množstvo pamäte alebo potrebného miesta na disku, časová zložitosť opisuje, ako dlho algoritmus vykonáva úlohu.
Existujú rôzne spôsoby, ako analyzovať časovú zložitosť algoritmov, ako je zápis Big O a Omega. Symbol Omega poskytuje hornú hranicu časovej zložitosti algoritmu, zatiaľ čo symbol Omega poskytuje dolnú hranicu.
Okrem merania časovej a priestorovej zložitosti zahŕňa analýza algoritmov aj ďalšie kritériá, ako je stabilita, paralelizmus a škálovateľnosť.
Zahŕňajú dva typy analýz.
oni sú:-
- Predbežná analýza.
- Zadná analýza.
Predchádzajúca analýza
Prior je metóda analýzy algoritmov, ktorá sa zameriava na odhad výkonu algoritmu na základe jeho matematických vlastností bez skutočného vykonania algoritmu.
Tento prístup vám umožňuje analyzovať časovú a priestorovú zložitosť algoritmov a iných metrík bez potreby implementácie a spúšťania algoritmov.
zachrániť z
Zadná analýza
Na druhej strane zadná analýza je metóda analýzy algoritmu, ktorá v skutočnosti vykonáva algoritmus a meria jeho výkon.
Tento prístup poskytuje presnejšie a podrobnejšie informácie o výkone algoritmu, ale vyžaduje implementáciu a vykonanie algoritmu.
Zložitosť algoritmu
Algoritmická zložitosť je miera na meranie účinnosti a výkonu algoritmu. Algoritmy sa zvyčajne hodnotia z hľadiska času a priestoru potrebného na vyriešenie problému alebo dosiahnutie konkrétneho cieľa.
V zložitosti algoritmu sa používajú dva faktory.
oni sú:-
- Časový faktor.
- Priestorový faktor.
Časový faktor
- Čas, ktorý algoritmus potrebuje na vykonanie úlohy, sa označuje ako časová zložitosť. Zvyčajne sa meria počtom operácií alebo krokov, ktoré musí algoritmus vykonať, aby vyriešil problém.
- Časová zložitosť algoritmu je dôležitá, pretože určuje, ako dlho trvá jeho vykonanie a môže mať významný vplyv na výkon programu a systému.
- Časová zložitosť algoritmu môže byť vyjadrená pomocou notácie Big O, čo je spôsob vyjadrenia hornej hranice časovej zložitosti algoritmu.
- Algoritmus s časovou zložitosťou O(n) znamená, že čas potrebný na spustenie algoritmu je priamo úmerný veľkosti vstupných údajov (n).
- Ďalšie bežné časové zložitosti sú O(n^2) kvadratická zložitosť a O(log n) logaritmická zložitosť.
Analýza priestoru
- Na druhej strane priestorová zložitosť sa týka množstva pamäte alebo úložného priestoru potrebného na vykonanie algoritmu.
- Je to dôležité, pretože určuje počet prostriedkov potrebných na spustenie algoritmov, ktoré môžu ovplyvniť celkový výkon vašej aplikácie alebo systému.
- Ak je priestorová zložitosť algoritmu O(n), používa množstvo pamäte, ktoré lineárne rastie s veľkosťou vstupu.
- Ak má algoritmus priestorovú zložitosť O(1), používa pevné množstvo pamäte bez ohľadu na veľkosť vstupu.
Ako napísať algoritmus
1. Najprv definujte problém, ktorý má algoritmus vyriešiť.
Predpokladajme napríklad, že chceme napísať algoritmus na nájdenie maximálnej hodnoty zo zoznamu čísel.
2. Rozdeľte problém na menšie, zvládnuteľné kroky.
- Inicializujte premennú 'max' na prvú hodnotu v zozname.
- Pre každú nasledujúcu hodnotu v zozname porovnajte s hodnotou „max“.
- Ak je hodnota väčšia ako 'max', nastavte 'max' na túto hodnotu.
- Pokračujte v tom, kým sa neporovnajú všetky hodnoty v zozname.
- Vráti konečnú hodnotu „max“.
3. Napíšte svoj algoritmus v pseudokóde alebo programovacom jazyku.
Algoritmus napísaný v pseudokóde:
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. Otestujte svoj algoritmus, aby ste sa uistili, že je správny a efektívny.
Algoritmus môžete otestovať zadaním rôznych zoznamov čísel a overením, či vracia maximálnu správnu hodnotu. Môžete tiež analyzovať časovú zložitosť svojho algoritmu, aby ste určili, ako dobre sa prispôsobuje väčším vstupom.
Príklad:-
rekha vek
Vstup: [1, 5, 2, 7, 3]
Výstup: 7.
Vysvetlenie: 7 je maximálna hodnota v zozname.
5. Optimalizujte algoritmus.
Hľadajte spôsoby, ako optimalizovať algoritmy, aby boli rýchlejšie a efektívnejšie. To môže zahŕňať úpravu pseudokódu alebo implementáciu efektívnejších dátových štruktúr alebo algoritmov.
Základné písanie algoritmov
Príklad: - Súčet dvoch celých čísel.
Krok 1 - Začať
Krok 2 - Deklarujte tri celé čísla a, b, c
Krok 3 - Definujte hodnoty a a b
Krok 4 - Pridajte hodnoty a a b
Krok 5 - Uložte výstup z kroku 4 v c
kedy začína q2
Krok 6 - Tlač c
Krok 7 - Prestaň
Typ algoritmov používaných v jazyku C.
1. Algoritmy triedenia
C poskytuje bohatú sadu dátových typov a operátorov, ktoré možno použiť na implementáciu rôznych triediacich algoritmov, ako je bublinové triedenie, vkladanie triedenia a rýchle triedenie.
Tieto algoritmy sú užitočné v mnohých aplikáciách, pretože sa dajú použiť na triedenie údajov rôznych veľkostí a typov.
Existujú rôzne algoritmy triedenia.
oni sú:-
(i) Bublinové triedenie: Nekomplikovaný triediaci algoritmus, ktorý opakovane porovnáva blízke komponenty a vypína ich, ak sú mimo prevádzky.
Algoritmus pre bublinové triedenie je:-
- Začnite s nezoradeným zoznamom prvkov.
- Porovnajte prvé dva prvky v zozname. Ak je prvý prvok väčší ako druhý, vymeňte ich.
- Prejdite na ďalšiu dvojicu prvkov a opakujte krok 2, kým sa nedosiahne koniec zoznamu.
- Pre každú položku v zozname zopakujte kroky 2 a 3 ešte raz. ktorá sa označuje ako priepustky.
- Opakujte kroky 2-4 pre celý zoznam. Ako budete opakovať prechody, prvky budú „bublať“ na svoju správnu pozíciu v zoradenom zozname.
- Po dokončení prechodu a bez vykonania výmeny sa zoznam zoradí a algoritmus sa môže zastaviť.
- Vráti sa konečný zoradený zoznam.
(ii) Druh vloženia : metóda triedenia, ktorá vytvára triedený zoznam po jednotlivých prvkoch umiestnením každého z nich na príslušné miesto.
Algoritmus na zoradenie vkladania je:-
- Inicializujte prázdny zoradený zoznam a nezoradený zoznam prvkov, ktoré sa majú zoradiť.
- Prvý člen z nezoradeného zoznamu by sa mal vziať a umiestniť na príslušné miesto v zoradenom zozname.
- Opakujte krok 2 pre každý nasledujúci prvok v nezoradenom zozname.
- Porovnajte aktuálny prvok s prvkami zoradeného zoznamu, počnúc prvkom hneď vľavo.
- Vymeňte dva prvky, ak je aktuálny prvok menší ako prvok naľavo od neho.
- Ak je aktuálny prvok väčší ako prvok naľavo, vložte ho na správnu pozíciu v zoradenom zozname.
- Opakujte kroky 4-6 pre každý nasledujúci prvok v nezoradenom zozname.
- Po spracovaní všetkých prvkov bude zoradený zoznam obsahovať všetky prvky v správnom poradí.
- Proces triedenia je dokončený.
(iii) Triedenie výberu : spôsob triedenia, ktorý dôsledne spúšťa triedený výpis s najmenším detailom z neusporiadaného výpisu.
Algoritmus na triedenie výberu je:
- Začnite nastavením primárneho prvku zoznamu ako prvku min.
- Opakujte cez zostávajúce položky v zozname a porovnajte každú z nich s aktuálnym minimom.
- Nastavte nové minimum, ak sa zistí, že prvok je menší ako ten existujúci.
- Zmeňte aktuálne minimum na prvý prvok zoznamu vždy, keď dosiahne svoj záver.
- Pre zostávajúcu nezoradenú časť zoznamu zopakujte kroky 2-4, ale začnite druhou položkou v zozname (keďže prvý prvok je už zoradený).
- Pokračujte v zoraďovaní zoznamu týmto spôsobom, kým nebude celý zoradený.
(iv) Rýchle triedenie : Algoritmus triedenia rozdeľuj a panuj, ktorý vyberá hlavný prvok a rozdeľuje zoznam na podzoznamy v závislosti od toho, či je prvkov menej alebo viac ako pivot. Potom sa podzoznamy opakovane triedia, kým sa nezoradí celý zoznam.
Algoritmus rýchleho triedenia je:
príklad java mapy
- Vyberte prvok pivot zo zoznamu. Toto je zvyčajne prvý prvok, ale môže to byť aj náhodný prvok alebo medián zoznamu.
- Rozdeľte zoznam na dva podzoznamy: jeden obsahuje prvky menšie ako pivot a druhý obsahuje prvky väčšie ako pivot.
- Pomocou rovnakého procesu rekurzívne zoraďte podzoznam obsahujúci prvky menšie ako pivot.
- Rovnaký postup použite na rekurzívne zoradenie podzoznamu položiek väčších ako pivot.
- Spojte zoradené podzoznamy s pivotovým prvkom medzi nimi, aby ste vytvorili úplne zoradený zoznam.
- Vrátiť úplne zoradený zoznam.
(v) Lot ide : Algoritmus triedenia rozdeľuj a panuj rozdelí zoznam na dve polovice, zoradí každú polovicu a potom tieto dve polovice zlúči v zoradenom poradí.
Algoritmus zlučovania:
- Zo zoznamu vytvorte dva podzoznamy: jeden s prvkami pod pivotom a druhý s prvkami nad pivotom.
- Vytvára nový triedený podzoznam iteratívnym zlučovaním podzoznamov, až kým nebude existovať iba jeden podzoznam. Toto bude váš zoradený zoznam.
- Kroky na zlúčenie dvoch podadresárov: -
- Vytvorte prázdny zoznam, v ktorom budú uložené zoradené prvky.
- Porovná prvý prvok každého podzoznamu.
- Pridá menší prvok do nového zoznamu a odstráni ho z nadradeného podzoznamu.
- Opakujte kroky 2 a 3, kým nebude zoznam úplne prázdny.
- Pridá zostávajúce prvky z iných podzoznamov do nového zoznamu.
- Nahradí zlúčený podzoznam novým zoradeným zoznamom.
- Tento postup opakujte, kým sa všetky podzoznamy nezlúčia do jedného zoradeného zoznamu.
(vi) Triedenie haldy : Algoritmus triedenia, ktorý triedi prvky pomocou dátovej štruktúry nazývanej halda.
Toto je klasifikačný algoritmus:
- Naskladajte zvyšok prvkov. Počnúc od koreňa sa každý uzol porovnáva so svojimi deťmi, pričom sa vymieňajú uzly so svojimi staršími deťmi, kým nie je splnená vlastnosť max haldy.
- Opakujte kroky 2 a 3 s novo naskladanými prvkami, s výnimkou posledného prvku v správnej polohe.
- Tento postup opakujte, kým v stohu nezostane iba jeden prvok. Toto je teraz zoradené.
(vii) Radix sort : Algoritmus triedenia, ktorý triedi prvky na základe číslic alebo číslic ich binárnej reprezentácie.
Algoritmus pre radenie Radix je: -
- určiť, koľko číslic je obsiahnutých v najväčšom prvku vstupného výpisu.
- Inicializujte premennú, povedzme miesto číslice, na 1, ktorá predstavuje aktuálne miesto číslice.
- Vytvorte prázdny zoznam pre každú možnú číselnú hodnotu od 0 do 9.
- Iterujte cez zoznam vstupov a pridajte každý prvok do príslušného zoznamu na základe hodnoty aktuálneho miesta číslice.
- Zreťazením všetkých zoznamov vytvorte nový zoznam v poradí čísel.
- Vynásobením čísla digitPlace 10 sa presuniete na ďalšie miesto s číslicou.
- Opakujte kroky 4-6 pre každú číslicu, kým nezohľadníte všetky číslice najväčšieho prvku.
- Konečný zoznam bude zoradený vzostupne podľa číslic prvkov.
- Vráťte konečný zoradený zoznam.
2. Vyhľadávacie algoritmy
C tiež poskytuje nástroje potrebné na implementáciu rôznych vyhľadávacích algoritmov, ako je lineárne vyhľadávanie a binárne vyhľadávanie. Tieto algoritmy dokážu rýchlo nájsť konkrétne položky v súbore údajov, vďaka čomu sú užitočné pre širokú škálu aplikácií.
Existuje mnoho typov vyhľadávacích algoritmov.
Oni sú:-
(i) Lineárne vyhľadávanie : Základný vyhľadávací algoritmus, ktorý skúma každú položku v zozname jednu po druhej, kým nenájde požadovanú položku.
Algoritmus pre lineárne vyhľadávanie: -
- Definujte vstup pre algoritmus: Vstupom pre algoritmus lineárneho vyhľadávania je zoznam prvkov (alebo pole) a cieľový prvok, ktorý hľadáme.
- Inicializujte premennú s názvom „index“ na -1: Táto premenná sa použije na uloženie indexu cieľového prvku, ak sa nájde.
- Slučka cez zoznam prvkov: Začnite od prvého prvku a skontrolujte každý prvok v zozname jeden po druhom.
- Porovnajte prítomný prvok s požadovaným prvkom na vyhodnotenie: Ponechajte index aktuálneho prvku v premennej index a opustite cyklus, ak sú moderný prvok a prvok cieľa identické.
- Vráťte index cieľového prvku: Po dokončení cyklu vráťte hodnotu uloženú v premennej index. Ak sa cieľový prvok nenájde, hodnota indexu bude -1.
(ii) Binárne vyhľadávanie : Vyhľadávací algoritmus, ktorý funguje tak, že rozdelí záznam na polovice a vyhľadáva v rámci týchto polovíc, bude pravdepodobne zahŕňať prvok.
Algoritmus pre binárne vyhľadávanie: -
- Vstup: Zoradený zoznam n prvkov a cieľový prvok x.
- Inicializácia premenných: Nastavte nízky index na 0, vysoký index na n-1 a stredný na (nízky+vysoký)/2.
- Spustenie cyklu: Kým je nízky index menší alebo rovný vysokému indexu, zopakujte nasledujúce kroky.
- Porovnajte stredný prvok s x: Ak sa stredný prvok rovná x, vráťte stredový index.
- Aktualizujte nízky alebo vysoký index: Ak je x väčšie ako stredný prvok, nastavte nízky index na stred + 1. V opačnom prípade nastavte vysoký index na stred - 1.
- Aktualizujte stredný index: Stred = (nízky+vysoký)/2.
- Koniec cyklu: Ak je nízky index väčší ako vysoký index, potom x nie je v zozname a algoritmus vráti zlyhanie.
- Výstup: Index x v zozname alebo chybovej správe.
(iii) Hĺbkové vyhľadávanie : Algoritmus vyhľadávania, ktorý skúma každú vetvu tak ďaleko, ako je to možné, predtým, než sa obráti.
Pre hĺbkové vyhľadávanie platia nasledujúce pokyny:
- vyberte začiatočný vrchol alebo uzol grafu, s ktorým chcete začať.
- Pridajte návštevnú značku k prvému vrcholu.
- Začiatočný vrchol umiestnite priamo do stohu.
- Kým nie je zásobník prázdny, opakujte nasledujúce akcie: -
- Odstráňte horný vrchol zásobníka.
- Označte ako navštívené a vložte do zásobníka každého nenavštíveného suseda vyskočeného vrcholu.
- Pokračujte v tomto procese, kým neprejdete všetky vrcholy v grafe.
- Po navštívení všetkých vrcholov je algoritmus dokončený a v grafe sa vykoná hĺbkové vyhľadávanie.
(iv) Hľadanie do šírky : Algoritmus vyhľadávania, ktorý skúma všetkých susedov uzla pred prechodom na ďalšiu úroveň.
Algoritmus pre vyhľadávanie do šírky je:-
- Začnite s koreňovým uzlom alebo počiatočným stavom.
- Pridajte koreňový uzol do frontu.
- Skontrolujte, či je front prázdny; ak áno, ukončite algoritmus.
- Vezmite prvý prvok z frontu a označte ho ako navštívený.
- Zosilnite súčasný uzol pridaním všetkých jeho nenavštívených susedov do frontu.
- Kým nenájdete požadovaný uzol alebo kým nebude front prázdny, opakujte kroky 3 až 5.
- Vráťte cestu z predbežného stavu do cieľového stavu, ak sa nájde cieľový uzol.
- Ak je front prázdny, ukončite sadu pravidiel a nahláste, že stav cieľa nebol identifikovaný.
(v) Hľadanie interpolácie : Algoritmus vyhľadávania, ktorý používa hodnoty hľadaných prvkov na odhadnutie pozície v indexe.
Je dôležité, aby bolo pole rovnomerne rozložené. V opačnom prípade je to algoritmus.
Funguje podľa očakávania.
Algoritmus možno zhrnúť nasledovne.
- Získajte zoznam vstupov a kľúčovú hodnotu na vyhľadávanie.
- Inicializujte spodné a horné premenné na prvom a poslednom indexe zoznamu.
- Ak je nižšia hodnota menšia alebo rovná vyššej hodnote, potom: -
- Vypočítajte odhadovanú polohu pomocou nasledujúceho vzorca:
pos = nízka + ((vysoká - nízka) / (arr[vysoká] - arr[nízka])) * (x - arr[nízka]). - Vráťte pozíciu, ak je odhadovaná hodnota pozície kľúčovou hodnotou.
- c) Ak je odhadovaná hodnota pozície nižšia ako kľúčová hodnota, nastavte ju nižšie.
Pozícia + 1. - d) Ak je hodnota odhadovanej pozície väčšia ako hodnota kľúča Set, pozícia - 1 hore.
- Vypočítajte odhadovanú polohu pomocou nasledujúceho vzorca:
- Ak sa hodnota kľúča nenájde, vráťte hodnotu -1 na označenie, že hodnota nie je v zozname.
(vi) Skokové vyhľadávanie : Metóda vyhľadávania, ktorá iteruje zoznam v krokoch s konštantnou dĺžkou, kým nenájde príslušný prvok alebo nezistí, že už nie je prítomný.
Algoritmus vyhľadávania skokov je nasledujúci:
- Najprv nastavte veľkosť skoku na druhú odmocninu počtu prvkov poľa.
- Nastaví premennú s názvom 'current' na prvý prvok poľa.
- Iteruje cez pole skokom podľa veľkosti skoku a zároveň zvyšuje premennú nazývanú „skok“.
- Ak je existujúci prvok menší ako požadovaný prvok, prejdite na nasledujúci skok.
- Ak je aktuálny prvok väčší ako cieľový prvok, vykonajte lineárne vyhľadávanie medzi aktuálnym prvkom a predchádzajúcim prvkom skoku, aby ste našli cieľový prvok.
- Ak sa cieľový prvok v poli nenájde, vráti hodnotu -1, čo znamená, že sa v poli nenachádza.
- Ak sa prvok nájde, vráti index prvku v poli.
3. Grafové algoritmy
Podpora C pre ukazovatele a dátové štruktúry, ako sú polia a prepojené zoznamy, ho robí vhodným na implementáciu algoritmov, ktoré manipulujú s grafmi, ako je hľadanie najkratšej cesty medzi dvoma uzlami v grafe.
Existujú rôzne typy grafových algoritmov.
oni sú:-
náhodné číslo c kód
4. Kryptografické algoritmy
C podporuje operácie na nízkej úrovni a efektívnu manipuláciu s údajmi, vďaka čomu je ideálny na implementáciu algoritmov používaných v kryptografii, ako sú šifrovacie a dešifrovacie algoritmy.
Existujú rôzne typy šifrovacích algoritmov.
Oni sú:-
Výhody algoritmu
Algoritmy majú veľa výhod.
oni sú:-
Nevýhody algoritmu
Algoritmy sú veľmi užitočné pre programovanie, ale algoritmy majú nevýhody.
oni sú:-