Algoritmus: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
 
(27 medziľahlých úprav od 3 ďalších používateľov nie je zobrazených)
Riadok 2: Riadok 2:
 
[[Kategória:Informatika]]
 
[[Kategória:Informatika]]
 
{{Skripta_ZI}}
 
{{Skripta_ZI}}
 
+
__TOC__
 
==<big>Algoritmus</big>==
 
==<big>Algoritmus</big>==
 
'''Algoritmus''' znamená proces alebo súbor pravidiel ktoré sa majú dodržiavať pri operáciach alebo riešení problémov. Algoritmus sa preto týka súboru pravidiel,pokynov ktoré postupne definujú, ako sa má práca vykonať, aby sa dosiahli očakávané výsledky.<ref>>https://www.geeksforgeeks.org/introduction-to-algorithms/</ref>
 
'''Algoritmus''' znamená proces alebo súbor pravidiel ktoré sa majú dodržiavať pri operáciach alebo riešení problémov. Algoritmus sa preto týka súboru pravidiel,pokynov ktoré postupne definujú, ako sa má práca vykonať, aby sa dosiahli očakávané výsledky.<ref>>https://www.geeksforgeeks.org/introduction-to-algorithms/</ref>
 +
 +
Práca počítača je presne determinovaná. Počítač je absolútne neiniciatívny a všetko, čo chceme, aby urobil mu musíme nariadiť. Prácu počítaču nariaďujeme programom. K tomu aby sme mohli program zostaviť potrebujeme vytvoriť postupnosť krokov, ktorá v každom okamihu určuje ako postupovať ďalej, tzv. algoritmus. Jedna z definícií algoritmu hovorí, že algoritmus je presný popis definujúci výpočtový proces, vedúci od meniteľných vstupných údajov až k žiadaným výsledkom. Táto definícia síce presne vystihuje podstatu a účel algoritmu, je však úzko špecializovaná Obmedzuje sa len na výpočtový proces. Algoritmy však nepoužívame len pri počítačoch pri príprave programov, ale ich použitie je všeobecné. Pomocou algoritmu totiž môžeme presne definovať akýkoľvek determinovaný proces.
 +
  
 
[[Súbor:Univerzalny algoritmus.png|none|240px|]]
 
[[Súbor:Univerzalny algoritmus.png|none|240px|]]
Riadok 13: Riadok 16:
 
==<big>Vlasnosti algoritmu</big>==
 
==<big>Vlasnosti algoritmu</big>==
  
'''Jasný a jednoznačný:'''
+
===Hlavné vlasnosti algoritmu===
Každý z jeho krokov by mal byť jasný vo všetkých aspektoch a musí viesť iba k jednému významu.
+
;Jasný a jednoznačný: Každý krok algoritmu musí byť presne definovaný a nesmie dovoľovať viacej výkladov, teda nesmie pripúšťať pochybnosť o tom, ako postupovať ďalej - t. j. ako jednotlivé kroky nasledujú po sebe,
 +
 
 +
;Všeobecnosť: Algoritmus musí vyhovovať riešeniu všeobecnej skupiny úloh. Algoritmus musí vychádzať s meniteľných vstupných údajov, t. j. musí to byť popis riešenia nie len jednej úlohy, ale celej skupiny príbuzných úloh líšiacich sa od seba len vstupnými údajmi, <ref>https://spseke.sk/tutor/projekt/algoritmy.htm</ref>. Ako príklad môžeme uviesť riešenie kvadratickej rovnice, kde menitenými vstupnými údajmi sú koeficienty a,b,c a skupina úloh toho istého typu je množina všetkých kvadratických rovníc, kde a,b,c patria do R.
 +
 
 +
;Rezultatívnosť: Algoritmus musí vždy vyústiť do nejakého riešenia a to po konečnom počte krokov. Podotknime, že výsledok algoritmu môže byť aj "neviem" alebo "riešenie neexistuje", čo sa dá považovať správny výsledok.
  
 +
;Konečnosť: Počet opakovaní každého kroku je konečný
  
'''Dobre definované vstupy:'''
+
;Elementárnosť: Algoritmus pozostáva z konečného počtu elementárnych krokov.
Algoritmus zvyčajne pracuje s nejakými vstupmi, veličinami, ktoré sú mu odovzdané pred začatím jeho vykonávania, alebo v priebehu jeho činnosti.
 
Vstupy majú definované množiny hodnôt, ktoré môžu nadobúdať.
 
  
  
'''Dobre definovaný vstup:'''
+
===Doplnkové vlasnosti alogritmu===
Algoritmus má aspoň jeden výstup, veličinu, ktorá je v požadovanom vzťahu k zadaným vstupom, a tým tvorí odpoveď na problém, ktorý algoritmus rieši.
 
  
 +
;Zrozumiteľnosť:  Použitie takých prostriedkov na zápis algoritmu, ktoré by mali byť zrozumiteľné rôznym pracovníkom, ktorí budú s algoritmom pracovať (analytik, programátor, používateľ, oponent...).
  
'''Efektivita:'''
+
;Správnosť: Algoritmus musí úplne a správne riešiť danú úlohu.
Všeobecne požadujeme, aby algoritmus bol efektívny, v tom zmysle, že požadujeme, aby každá operácia požadovaná algoritmom,
 
bola dostatočne jednoduchá na to, aby mohla byť aspoň v princípe prevedená v konečnom čase iba s použitím ceruzky a papiera.
 
  
 +
;Efektívnosť:  Algoritmus má byť čo najvýhodnejší (najefektívnejší). Zmyslom efektívnosti je minimalizovať nároky na spracovanie činnosti podľa algoritmu. Efektívnosť môžeme posudzovať z rôznych hľadísk (výpočtový čas a kapacita pamätí počítača, minimalizácia finančných nárokov, minimalizácia spotreby energie, minimalizácia nárokov na personálne alebo materiálne vybavenie, minimalizácia dopadov na životné prostredie a pod.), prípadne sa snažíme optimalizovať vzájomný vzťah viacerých hľadísk. Táto požiadavka je často v rozpore s požiadavkou na štruktúrovanosť (prehľadnosť, modulárnosť, usporiadanosť) algoritmu.
  
'''Všeobecnosť:'''
+
;Modifikovateľnosť: Algoritmus by mal byť vytvorený tak, aby sa dal ľahko modifikovať pri potrebnej zmene vyvolanej zmenou podmienok riešenia (vonkajších a vnútorných).
Algoritmus nerieši jeden konkrétny problém (napr. „ako vypočítať 3×7“), ale rieši všeobecnú triedu obdobných problémov (napr. „ako vypočítať súčin dvoch celých čísel“).
 
<ref>https://spseke.sk/tutor/projekt/algoritmy.htm</ref>
 
  
 +
;Štruktúrovanosť:  Požiadavka na vnútornú štruktúru algoritmu, ktorý by mal byť rozdelený na relatívne samostatné, ale logicky nadväzujúce celky, ktoré riešia vždy príslušnú časť algoritmu, požiadavka súvisí so zrozumiteľnosťou a modifikovateľnosťou, dobre štruktúrovaný algoritmus je zrozumiteľný a ľahko modifikovateľný (opraviteľný).
  
 
==Riešenie problému pomocou algorimtu==
 
==Riešenie problému pomocou algorimtu==
Riadok 48: Riadok 52:
  
 
==Značky vývojových diagramov==
 
==Značky vývojových diagramov==
[[Súbor:Start.png|240px|none]] Značka sa využíva na začatie alebo ukončenie vývojového diagramu
+
[[Súbor:začiatok.png|100px|none]] Značka sa využíva na začatie alebo ukončenie vývojového diagramu
 +
 
  
[[Súbor:Blok.png|240px|none]] Výkonný blok na program
 
  
[[Súbor:Vstupvystup.png|160px|none]] Služi na zápis vstup a výstupov vývojoveého diagramu
+
[[Súbor:Untitled Diagram.png|100px|none]] Výkonný blok na program
  
[[Súbor:Untitled Diagram (3).png|240px|none]] Rozhodovací blok s jedným vstupom a viacerými výstupmi
 
  
==Príklady==
 
  
===Jednoduché opakovanie===
+
[[Súbor:Vstuo.png|100px|none]] Služi na zápis vstup a výstupov vývojoveého diagramu
Príklad na jednoduché opakovanie
+
 
 +
 
  
[[Súbor:Opakovanie.png|360px|none]]Ak podmienka platí program ide na výstup
+
[[Súbor:Untitled Diagram (3).png|160px|none]] Rozhodovací blok s jedným vstupom a viacerými výstupmi
Ak je podmienka neplatná vykoná príkaz a znova kým nebude platná podmienka
 
  
===Príklad na riešenie kvadratickej rovice===
 
Vývojový diagram pre kvadratickú rovnicu a jej riešenie
 
[[Súbor:Kvadratická rovnica.png|360px|none]]
 
Výsledkom diagramu je podla zadaných čísel x1,x2, poprípade x alebo na výstupe bude že nemá riešenie v reálnych čislach
 
  
===Príklad pomocou vývojového diagramu===
 
  
Algoritmus, ktorý zistí či je možné zostrojiť trojuholník ak zadáme dĺžky troch strán.
+
[[Súbor:Spojka.png|none|30px]]  Spojka
  
Vstup:
 
Dĺžky strán a,b,c
 
  
Výstup:
 
Je možné zostrojiť trojuholník alebo nie.
 
[[Súbor:Algtrojuh.png|none|360px]]
 
  
===Príklad v jazyku C===
+
[[Súbor:Spojnica.png|none|160px]]  Spojnica
<source lang="c" line>
 
// C program ktorý ščíta 3 čísla pomocou algoritmu
 
  
 
+
==Príklady==
#include <stdio.h>
+
'''Príklady''' na tvorbu vývojových diagramov nájdete v sekcií:
 
+
[http://www.kiwiki.info/index.php/Jazyk_C_(príklady)_-_Algoritmy[Príklady algoritmus]]
int main()
 
{
 
 
 
    // Premenné na vloženie 3 čísel
 
    int num1, num2, num3;
 
 
 
    // Premenná na ščítanie čísel
 
    int sum;
 
 
 
    // Vložiť 3 čísla
 
    printf("Vlož 1. číslo: ");
 
    scanf("%d", &num1);
 
    printf("%d\n", num1);
 
 
 
    printf("Vlož 2. číslo: ");
 
    scanf("%d", &num2);
 
    printf("%d\n", num2);
 
 
 
    printf("Vlož 3. číslo: ");
 
    scanf("%d", &num3);
 
    printf("%d\n", num3);
 
 
 
    // Sčítanie prememných a následné vypísanie súčtu
 
   
 
    sum = num1 + num2 + num3;
 
 
 
    // Výpis súčtu
 
    printf("\nSúčet čísel je: %d", sum);
 
 
 
    return 0;
 
}
 
</source>
 
  
=Odkazy=
+
=Referencie=
 
<references/>
 
<references/>

Aktuálna revízia z 22:54, 19. september 2022


Algoritmus

Algoritmus znamená proces alebo súbor pravidiel ktoré sa majú dodržiavať pri operáciach alebo riešení problémov. Algoritmus sa preto týka súboru pravidiel,pokynov ktoré postupne definujú, ako sa má práca vykonať, aby sa dosiahli očakávané výsledky.[1]

Práca počítača je presne determinovaná. Počítač je absolútne neiniciatívny a všetko, čo chceme, aby urobil mu musíme nariadiť. Prácu počítaču nariaďujeme programom. K tomu aby sme mohli program zostaviť potrebujeme vytvoriť postupnosť krokov, ktorá v každom okamihu určuje ako postupovať ďalej, tzv. algoritmus. Jedna z definícií algoritmu hovorí, že algoritmus je presný popis definujúci výpočtový proces, vedúci od meniteľných vstupných údajov až k žiadaným výsledkom. Táto definícia síce presne vystihuje podstatu a účel algoritmu, je však úzko špecializovaná Obmedzuje sa len na výpočtový proces. Algoritmy však nepoužívame len pri počítačoch pri príprave programov, ale ich použitie je všeobecné. Pomocou algoritmu totiž môžeme presne definovať akýkoľvek determinovaný proces.


Univerzalny algoritmus.png


Navrhnutý algoritmus je nezávislý od jazyka, tzn. že ide iba o jednoduché pokyny, ktoré je možné implementovať v akomkoľvek jazyku, a napriek tomu bude výstup rovnaký, ako sa očakávalo.

Vlasnosti algoritmu

Hlavné vlasnosti algoritmu

Jasný a jednoznačný
Každý krok algoritmu musí byť presne definovaný a nesmie dovoľovať viacej výkladov, teda nesmie pripúšťať pochybnosť o tom, ako postupovať ďalej - t. j. ako jednotlivé kroky nasledujú po sebe,
Všeobecnosť
Algoritmus musí vyhovovať riešeniu všeobecnej skupiny úloh. Algoritmus musí vychádzať s meniteľných vstupných údajov, t. j. musí to byť popis riešenia nie len jednej úlohy, ale celej skupiny príbuzných úloh líšiacich sa od seba len vstupnými údajmi, [2]. Ako príklad môžeme uviesť riešenie kvadratickej rovnice, kde menitenými vstupnými údajmi sú koeficienty a,b,c a skupina úloh toho istého typu je množina všetkých kvadratických rovníc, kde a,b,c patria do R.
Rezultatívnosť
Algoritmus musí vždy vyústiť do nejakého riešenia a to po konečnom počte krokov. Podotknime, že výsledok algoritmu môže byť aj "neviem" alebo "riešenie neexistuje", čo sa dá považovať správny výsledok.
Konečnosť
Počet opakovaní každého kroku je konečný
Elementárnosť
Algoritmus pozostáva z konečného počtu elementárnych krokov.


Doplnkové vlasnosti alogritmu

Zrozumiteľnosť
Použitie takých prostriedkov na zápis algoritmu, ktoré by mali byť zrozumiteľné rôznym pracovníkom, ktorí budú s algoritmom pracovať (analytik, programátor, používateľ, oponent...).
Správnosť
Algoritmus musí úplne a správne riešiť danú úlohu.
Efektívnosť
Algoritmus má byť čo najvýhodnejší (najefektívnejší). Zmyslom efektívnosti je minimalizovať nároky na spracovanie činnosti podľa algoritmu. Efektívnosť môžeme posudzovať z rôznych hľadísk (výpočtový čas a kapacita pamätí počítača, minimalizácia finančných nárokov, minimalizácia spotreby energie, minimalizácia nárokov na personálne alebo materiálne vybavenie, minimalizácia dopadov na životné prostredie a pod.), prípadne sa snažíme optimalizovať vzájomný vzťah viacerých hľadísk. Táto požiadavka je často v rozpore s požiadavkou na štruktúrovanosť (prehľadnosť, modulárnosť, usporiadanosť) algoritmu.
Modifikovateľnosť
Algoritmus by mal byť vytvorený tak, aby sa dal ľahko modifikovať pri potrebnej zmene vyvolanej zmenou podmienok riešenia (vonkajších a vnútorných).
Štruktúrovanosť
Požiadavka na vnútornú štruktúru algoritmu, ktorý by mal byť rozdelený na relatívne samostatné, ale logicky nadväzujúce celky, ktoré riešia vždy príslušnú časť algoritmu, požiadavka súvisí so zrozumiteľnosťou a modifikovateľnosťou, dobre štruktúrovaný algoritmus je zrozumiteľný a ľahko modifikovateľný (opraviteľný).

Riešenie problému pomocou algorimtu

1. Problém, ktorý má tento algoritmus vyriešiť.

2. Obmedzenia problému, ktoré je potrebné zohľadniť pri jeho riešení.

3. Vstup, ktorý sa má prijať na vyriešenie problému.

4. Výstup, ktorý možno očakávať, keď sa problém vyrieši.

5. Riešenie tohto problému v daných obmedzeniach.[3]

Značky vývojových diagramov

Začiatok.png

Značka sa využíva na začatie alebo ukončenie vývojového diagramu


Untitled Diagram.png

Výkonný blok na program


Vstuo.png

Služi na zápis vstup a výstupov vývojoveého diagramu


Untitled Diagram (3).png

Rozhodovací blok s jedným vstupom a viacerými výstupmi


Spojka.png

Spojka


Spojnica.png

Spojnica

Príklady

Príklady na tvorbu vývojových diagramov nájdete v sekcií: [Príklady algoritmus]

Referencie