logo

Definícia, typy, zložitosť a príklady algoritmov

Algoritmus je dobre definovaná sekvenčná výpočtová technika, ktorá akceptuje hodnotu alebo súbor hodnôt ako vstup a vytvára výstup (výstupy) potrebný na vyriešenie problému.

Alebo môžeme povedať, že algoritmus sa považuje za presný vtedy a len vtedy, ak sa zastaví so správnym výstupom pre každú inštanciu vstupu.



POTREBA ALGORITMOV:

Algoritmy sa používajú na riešenie problémov alebo automatizáciu úloh systematickým a efektívnym spôsobom. Ide o súbor pokynov alebo pravidiel, ktoré vedú počítač alebo softvér pri vykonávaní konkrétnej úlohy alebo pri riešení problému.

32-bitová architektúra vs 64-bitová

Existuje niekoľko dôvodov, prečo používame algoritmy:



    Efektivita: Algoritmy dokážu vykonávať úlohy rýchlo a presne, čo z nich robí nevyhnutný nástroj pre úlohy, ktoré si vyžadujú veľa výpočtov alebo spracovania údajov. Konzistentnosť: Algoritmy sú opakovateľné a poskytujú konzistentné výsledky pri každom ich spustení. To je dôležité pri práci s veľkým množstvom údajov alebo zložitých procesov. Škálovateľnosť: Algoritmy možno škálovať, aby zvládli veľké množiny údajov alebo zložité problémy, vďaka čomu sú užitočné pre aplikácie, ktoré vyžadujú spracovanie veľkých objemov údajov. Automatizácia: Algoritmy môžu automatizovať opakujúce sa úlohy, čím znižujú potrebu ľudského zásahu a uvoľňujú čas na iné úlohy. Štandardizácia: Algoritmy môžu byť štandardizované a zdieľané medzi rôznymi tímami alebo organizáciami, čo ľuďom uľahčuje spoluprácu a zdieľanie znalostí.

Celkovo sú algoritmy základným nástrojom na riešenie problémov v rôznych oblastiach vrátane informatiky, inžinierstva, analýzy údajov, financií a mnohých ďalších.

Príklad:

Predstavte si krabicu, kde nikto nevidí, čo sa deje vo vnútri, hovoríme čierna skrinka.

Dáme vstup do boxu a ten nám dá výstup, ktorý potrebujeme, ale postup, ktorý by sme mohli potrebovať poznať pri konverzii vstupu na požadovaný výstup, je ALGORITMUS.



Algoritmus je nezávislý od použitého jazyka. Programátorovi hovorí o logike použitej na vyriešenie problému. Ide teda o logický postup krok za krokom, ktorý programátorom slúži ako plán.

Príklady zo skutočného života, ktoré definujú použitie algoritmov:

  • Zvážte hodiny. Vieme, že hodiny tikajú, ale ako výrobca nastavil tieto matice a skrutky tak, aby sa neustále pohybovali každých 60 sekúnd, ručička min by sa mala pohybovať a každých 60 minút sa ručička hodín pohybovať? Takže na vyriešenie tohto problému musí byť za tým algoritmus.
  • Videli ste niekoho, kto vám varí vaše obľúbené jedlo? Je na to potrebný recept? Áno, je to nevyhnutné, pretože recept je postupný postup, ktorý premení surový zemiak na studený zemiak. Toto je algoritmus: podľa postupu na získanie požadovaného výstupu. Je potrebné dodržať postupnosť? Áno, postupnosť je najdôležitejšia vec, ktorú treba dodržať, aby sme dostali to, čo chceme.

Typy algoritmov:

  • Algoritmy triedenia: Bublinové triedenie, vkladanie triedenia a mnohé ďalšie. Tieto algoritmy sa používajú na triedenie údajov v určitom formáte.
  • Algoritmy vyhľadávania: Lineárne vyhľadávanie, binárne vyhľadávanie atď. Tieto algoritmy sa používajú pri hľadaní hodnoty alebo záznamu, ktorý používateľ požaduje.
  • Grafové algoritmy : Používa sa na nájdenie riešení problémov, ako je nájdenie najkratšej cesty medzi mestami, a skutočných problémov, ako sú problémy obchodného cestujúceho.

Algoritmy triedenia sú algoritmy, ktoré berú kolekciu prvkov a preusporiadajú ich v určenom poradí (napr. vzostupne alebo zostupne). Existuje mnoho rôznych triediacich algoritmov, z ktorých každý má svoje silné a slabé stránky. Niektoré z najčastejšie používaných triediacich algoritmov zahŕňajú:

Bublinové triedenie: Jednoduchý triediaci algoritmus, ktorý opakovane prechádza zoznamom, porovnáva susediace prvky a zamieňa ich, ak sú v nesprávnom poradí.

Zoradenie vloženia: Jednoduchý triediaci algoritmus, ktorý vytvára konečné zoradené pole po jednej položke porovnaním každej novej položky s položkami, ktoré už boli zoradené a vložením na správnu pozíciu.

Zoradenie výberu: Jednoduchý triediaci algoritmus, ktorý opakovane vyberá minimálny prvok z nezoradenej časti poľa a presúva ho na koniec zoradenej časti.

Zlúčiť triedenie: Algoritmus triedenia rozdeľuj a panuj, ktorý funguje tak, že rozdelí netriedený zoznam na n podzoznamov, zoradí každý podzoznam a potom ich zlúči späť do jedného zoradeného zoznamu.

Rýchle triedenie: Algoritmus triedenia rozdeľuj a panuj, ktorý funguje tak, že vyberie prvok pivota z poľa a rozdelí ostatné prvky do dvoch podpolí podľa toho, či sú menšie alebo väčšie ako pivot. Podpolia sa potom triedia rekurzívne.

Každý z týchto algoritmov má inú časovú a priestorovú zložitosť, vďaka čomu sú niektoré vhodnejšie pre určité prípady použitia ako iné.

Vyhľadávacie algoritmy sú algoritmy, ktoré hľadajú konkrétny prvok alebo hodnotu v dátovej štruktúre (ako je pole alebo prepojený zoznam). Niektoré z najčastejšie používaných vyhľadávacích algoritmov zahŕňajú:

Lineárne vyhľadávanie: Jednoduchý vyhľadávací algoritmus, ktorý iteruje každý prvok zoznamu, kým nenájde zhodu.

Binárne vyhľadávanie: Algoritmus vyhľadávania, ktorý funguje tak, že zoradený zoznam opakovane rozdeľuje na polovicu, kým sa nenájde požadovaný prvok alebo kým sa nezistí, že prvok neexistuje.

Skokové vyhľadávanie: Vyhľadávací algoritmus, ktorý funguje tak, že preskakuje vpred po pevných krokoch v zozname, kým sa nenájde vhodný kandidát, a potom vykoná lineárne vyhľadávanie v okolitých prvkoch.

Interpolačné vyhľadávanie : Vyhľadávací algoritmus, ktorý funguje na základe informácií o rozsahu hodnôt v zozname na odhadnutie polohy požadovaného prvku a následne na overenie, či je skutočne prítomný.

Vyhľadávanie v tabuľke hash: Vyhľadávací algoritmus, ktorý používa hašovaciu funkciu na mapovanie prvkov na indexy v poli a potom vykonáva vyhľadávanie v konštantnom čase v poli, aby našiel požadovaný prvok.

Každý z týchto algoritmov má inú časovú a priestorovú zložitosť, vďaka čomu sú niektoré vhodnejšie pre určité prípady použitia ako iné. Výber použitého algoritmu závisí od špecifických požiadaviek problému, ako je veľkosť dátovej štruktúry, rozloženie hodnôt a požadovaná časová zložitosť.

Grafové algoritmy sú súborom algoritmov, ktoré sa používajú na spracovanie, analýzu a pochopenie grafových dátových štruktúr. Grafy sú matematické štruktúry používané na modelovanie vzťahov medzi objektmi, pričom objekty sú reprezentované ako vrcholy (alebo uzly) a vzťahy medzi nimi sú reprezentované ako hrany. Grafové algoritmy sa používajú v rôznych aplikáciách, ako je sieťová analýza, analýza sociálnych sietí, systémy odporúčaní a v mnohých ďalších oblastiach, kde je dôležité pochopiť vzťahy medzi objektmi. Niektoré z bežných grafových algoritmov zahŕňajú:

Algoritmy najkratšej cesty (napr. Dijkstra's, Bellman-Ford, A*)
Minimálne algoritmy Spanning Tree (napr. Kruskal, Prim)
Algoritmy maximálneho toku (napr. Ford-Fulkerson, Edmonds-Karp)
Algoritmy toku siete (napr. Bipartitná zhoda)
Algoritmy pripojenia (napr. hĺbkové vyhľadávanie, hĺbkové vyhľadávanie)

Prečo používame algoritmy?

Predstavte si, že dve deti, Aman a Rohan, riešia Rubikovu kocku. Aman vie, ako to vyriešiť v určitom počte krokov. Na druhej strane, Rohan vie, že to urobí, ale nevie o postupe. Aman vyrieši kocku do 2 minút, zatiaľ čo Rohan je stále zaseknutý a do konca dňa sa mu to nejako podarilo vyriešiť (možno podvádzal, pretože postup je nevyhnutný).

Takže čas potrebný na vyriešenie pomocou procedúry/algoritmu je oveľa efektívnejší ako bez akéhokoľvek postupu. Preto je nutnosťou algoritmus.

Z hľadiska návrhu riešenia problému IT sú počítače rýchle, ale nie nekonečne rýchle. Pamäť môže byť lacná, ale nie zadarmo. Výpočtový čas je teda ohraničený zdroj a rovnako aj priestor v pamäti. Preto by sme mali používať tieto zdroje rozumne a algoritmy, ktoré sú efektívne z hľadiska času a priestoru, vám v tom pomôžu.

javascript tutoriál

Vytvorenie algoritmu:

Keďže algoritmus je jazykovo nezávislý, napíšeme kroky, ktoré demonštrujú logiku riešenia, ktoré sa má použiť na riešenie problému. Pred napísaním algoritmu však majte na pamäti nasledujúce body:

  • Algoritmus by mal byť jasný a jednoznačný.
  • V algoritme by malo byť 0 alebo viac dobre definovaných vstupov.
  • Algoritmus musí produkovať jeden alebo viac presne definovaných výstupov, ktoré sú ekvivalentné požadovanému výstupu. Po určitom počte krokov sa musia algoritmy zastaviť.
  • Algoritmy sa musí zastaviť alebo skončiť po konečnom počte krokov.
  • V algoritme by mali byť poskytnuté pokyny krok za krokom, ktoré by mali byť nezávislé od akéhokoľvek počítačového kódu.

Príklad: algoritmus na vynásobenie 2 čísel a vytlačenie výsledku:

Krok 1: Štart
Krok 2: Získajte vedomosti o vstupe. Tu potrebujeme 3 premenné; a a b budú užívateľským vstupom a c bude uchovávať výsledok.
Krok 3: Deklarujte premenné a, b, c.
Krok 4: Prevezmite vstup pre premenné aab od používateľa.
Krok 5: Poznať problém a nájsť riešenie pomocou operátorov, dátových štruktúr a logiky

Potrebujeme vynásobiť premenné a a b, takže použijeme operátor * a výsledok priradíme c.
To je c <- a * b

Krok 6: Skontrolujte, ako dať výstup, Tu musíme vytlačiť výstup. Tak napíš tlač c
Krok 7: Koniec

Príklad 1: Napíšte algoritmus na nájdenie maxima všetkých prvkov prítomných v poli.
Postupujte podľa nasledujúceho algoritmu:

Krok 1: Spustite program
Krok 2: Deklarujte premennú max s hodnotou prvého prvku poľa.
Krok 3: Porovnajte maximum s inými prvkami pomocou slučky.
Krok 4: Ak max Krok 5: Ak nezostane žiadny prvok, vráťte alebo vytlačte maximum, inak prejdite na krok 3.
Krok 6: Koniec riešenia

Príklad 2: Napíšte algoritmus na nájdenie priemeru 3 predmetov.
Postupujte podľa nižšie uvedeného algoritmu:

Krok 1: Spustite program
Krok 2: Povedzme, deklarujte a prečítajte si 3 predmet S1, S2, S3
Krok 3: Vypočítajte súčet všetkých 3 hodnôt Subject a výsledok uložte do premennej Sum (Súčet = S1+S2+S3)
Krok 4: Vydeľte súčet číslom 3 a priraďte ho k premennej Priemer. (Priemer = súčet/3)
Krok 5: Vytlačte hodnotu Priemer 3 predmetov
Krok 6: Koniec riešenia

Zistite o zložitosti algoritmu:

Zložitosť v algoritmoch sa týka množstva zdrojov (ako je čas alebo pamäť), ktoré sú potrebné na vyriešenie problému alebo vykonanie úlohy. Najbežnejšou mierou zložitosti je časová zložitosť, ktorá sa týka množstva času, ktorý algoritmus potrebuje na vytvorenie výsledku, v závislosti od veľkosti vstupu. Zložitosť pamäte sa týka množstva pamäte, ktorú používa algoritmus. Návrhári algoritmov sa snažia vyvíjať algoritmy s čo najnižšou časovou a pamäťovou zložitosťou, pretože vďaka tomu sú efektívnejšie a škálovateľnejšie.

Zložitosť algoritmu je funkcia popisujúca efektívnosť algoritmu z hľadiska množstva údajov, ktoré musí algoritmus spracovať.

Zvyčajne existujú prirodzené jednotky pre doménu a rozsah tejto funkcie.

Algoritmus sa analyzuje pomocou časovej zložitosti a priestorovej zložitosti. Napísanie efektívneho algoritmu pomáha spotrebovať minimálne množstvo času na spracovanie logiky. Pre algoritmus A sa posudzuje na základe dvoch parametrov pre vstup veľkosti n:

  • Časová zložitosť: Čas, ktorý algoritmus potrebuje na vyriešenie problému. Meria sa výpočtom iterácie slučiek, počtu porovnaní atď.
  • Časová zložitosť je funkcia opisujúca množstvo času, ktorý algoritmus zaberá, z hľadiska množstva vstupu do algoritmu.
  • Čas môže znamenať počet vykonaných prístupov do pamäte, počet porovnaní medzi celými číslami, počet vykonaní nejakej vnútornej slučky alebo inú prirodzenú jednotku súvisiacu s množstvom reálneho času, ktorý algoritmus zaberie.
  • Priestorová zložitosť: Priestor, ktorý zaberá algoritmus na vyriešenie problému. Zahŕňa priestor používaný potrebnými vstupnými premennými a akýkoľvek priestor navyše (okrem priestoru zaberaného vstupmi), ktorý používa algoritmus. Napríklad, ak používame hašovaciu tabuľku (druh dátovej štruktúry), potrebujeme pole na ukladanie hodnôt
  • toto je obsadený priestor navyše, preto sa započíta do priestorovej zložitosti algoritmu. Tento extra priestor je známy ako pomocný priestor.
  • Priestorová zložitosť je funkcia popisujúca množstvo pamäte (priestoru), ktorú algoritmus zaberá, z hľadiska množstva vstupu do algoritmu.
  • Priestorová zložitosť je niekedy ignorovaná, pretože využívaný priestor je minimálny a/alebo zrejmý, ale niekedy sa stáva problémom ako čas.

.Časová náročnosť operácií:

  • Výber štruktúry údajov by mal vychádzať z časovej náročnosti operácií, ktoré sa budú vykonávať.
  • Časová zložitosť je definovaná z hľadiska toho, koľkokrát je potrebné spustiť daný algoritmus na základe dĺžky vstupu.
  • Časová zložitosť algoritmu je množstvo času, ktoré trvá dokončenie každého príkazu. Veľmi závisí od veľkosti spracovávaných údajov.
  • Ak napríklad potrebujete často vyhľadávať, mali by ste použiť binárny strom vyhľadávania.

Priestorová zložitosť operácií:

  • Výber štruktúry údajov by mal vychádzať z priestorovej zložitosti operácií, ktoré sa budú vykonávať.
  • Množstvo pamäte použitej programom na jeho vykonanie je reprezentované jeho priestorovou zložitosťou.
  • Pretože program vyžaduje pamäť na ukladanie vstupných údajov a časových hodnôt počas behu, priestorová zložitosť je pomocný a vstupný priestor.
  • Napríklad, ak potrebujete uložiť veľa údajov, mali by ste použiť pole.

prípady v zložitosti:

Existujú dva bežne študované prípady zložitosti v algoritmoch:

ukážkový javascript

1. Najlepšia zložitosť prípadu: Najlepším scenárom pre algoritmus je scenár, v ktorom algoritmus vykoná minimálne množstvo práce (napr. zaberie najkratší čas, spotrebuje najmenej pamäte atď.).

2. Zložitosť najhoršieho prípadu: Najhorším scenárom pre algoritmus je scenár, v ktorom algoritmus vykoná maximálne množstvo práce (napríklad zaberie najdlhší čas, spotrebuje najviac pamäte atď.).

Pri analýze zložitosti algoritmu je často informatívnejšie študovať najhorší scenár, pretože to poskytuje zaručenú hornú hranicu výkonu algoritmu. Niekedy sa vykonáva analýza najlepšieho scenára, ale vo všeobecnosti je menej dôležitá, pretože poskytuje dolnú hranicu, ktorú je často triviálne dosiahnuť.

Výhody algoritmov

  • Ľahko pochopiteľné: Keďže ide o postupnú reprezentáciu riešenia daného problému, je ľahké ho pochopiť.
  • Nezávislé na jazyku: Nie je závislý na žiadnom programovacom jazyku, takže ho ľahko pochopí každý.
  • Ladenie / Hľadanie chýb: Každý krok je nezávislý / v toku, takže bude ľahké zistiť a opraviť chybu.
  • Čiastkové problémy: Je napísaný v toku, takže teraz môže programátor rozdeliť úlohy, čo uľahčuje ich kódovanie.

Nevýhody algoritmov

  • Vytváranie efektívnych algoritmov je časovo náročné a vyžaduje si dobré logické schopnosti.
  • Nechutné ukázať vetvenie a zacyklenie v algoritmoch.