Znalost moderního programování otevírá dveře budoucností.

asdfasdf

Realizace základních algoritmů

– Eukleidův algoritmus

a Eratosthenovo síto

Sdílet příspěvek

Algoritmy tvoří základ informatického myšlení a programování. V této studii se zaměříme na dva klasické algoritmy, které reprezentují efektivní přístup k řešení aritmetických a číselných problémů:

Eukleidův algoritmus – efektivní metoda výpočtu největšího společného dělitele (NSD),

Eratosthenovo síto – algoritmus pro hledání všech prvočísel menších než dané číslo.

Pro každý z těchto algoritmů nejprve uvedeme teoretický základ, následně podrobný postup řešení krok za krokem a nakonec jednoduchou implementaci v jazyce Python.

Eukleidův algoritmus

Eukleidův algoritmus je jedním z nejstarších známých algoritmů, poprvé popsán v Eukleidových Základech (cca 300 př. n. l.). Je určen pro výpočet největšího společného dělitele (NSD) dvou kladných celých čísel. Využívá vlastnosti, že platí:

NSD(a,b) = NSD(b,a mod b)

a že:

NSD(a,0) = a

Postup krok za krokem

Zadaná čísla označme a a b, přičemž a ≥ b.

Vypočítej zbytek po dělení a % b.

Nahraď a hodnotou b a b hodnotou zbytku.

Opakuj, dokud b není rovno 0.

Výsledné a je hledaný NSD.

Python implementace


    def eukliduv_algoritmus(a, b):
        while b != 0:
            a, b = b, a % b
        return a

    # Ukázka použití
    print(eukliduv_algoritmus(252, 105))  # Výstup: 21
        

Eratosthenovo síto

Eratosthenovo síto (Sieve of Eratosthenes) je starověký algoritmus pro nalezení všech prvočísel menších než dané celé číslo n. Pochází od řeckého matematika Eratosthena z Kyrény (cca 200 př. n. l.).

Postup krok za krokem

Vytvoř seznam čísel od 2 do n.

Zvol nejmenší číslo p v seznamu, které ještě nebylo vyškrtnuto (na začátku p = 2).

Vyškrtej všechny násobky čísla p větší než p samotné.

Najdi další vyškrtnuté číslo větší než p a nahraď jím p.

Opakuj kroky 3–4, dokud p * p > n.

Zbylá čísla ve seznamu jsou prvočísla.

Python implementace


    def eratosthenovo_sito(n):
        if n < 2:
            return []

        je_prvocislo = [True] * (n + 1)
        je_prvocislo[0] = je_prvocislo[1] = False

        p = 2
        while p * p <= n:
            if je_prvocislo[p]:
                for i in range(p * p, n + 1, p):
                    je_prvocislo[i] = False
            p += 1

        return [i for i, is_prime in enumerate(je_prvocislo) if is_prime]

    # Ukázka použití
    print(eratosthenovo_sito(50))  # Výstup: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
        

Srovnání algoritmů

Tyto dva algoritmy patří k základním stavebním kamenům algoritmického myšlení. Eukleidův algoritmus učí efektivní rekurzivní a iterativní přístup, zatímco Eratosthenovo síto ukazuje sílu předzpracování a práce s polem při řešení problému v číselné teorii. Porozumění těmto klasickým metodám je nezbytné pro další studium informatiky a teorie algoritmů.

Zdroje

Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2022). Introduction to Algorithms. MIT Press.

Knuth, D. E. (1997). The Art of Computer Programming, Volume 2: Seminumerical Algorithms. Addison-Wesley.

Sedláček, J. (2012). Algoritmizace a programování. Brno: VUT Brno.

Wikipedia contributors. (2024). Euclidean algorithm. In Wikipedia, The Free Encyclopedia.

Wikipedia contributors. (2024). Sieve of Eratosthenes. In Wikipedia, The Free Encyclopedia.

PUBLIKOVÁNO
04.06.2024, 13:25
ODKAZ
https://www.strednijablunkov.cz/Article/...
asfdasd
asfdasd
asfdasd
asfdasd
asfdasd
asfdasd

Začni hned teď
pracovat na zlepšení svých znalostí.

Vytvoř si vlastní síť zkušeností, přesně tak, jak potřebuješ.