← zpět

Analýza časové složitosti, binární vyhledávání

Lekce 5

Úlohy

Odmocnina

Spočítejte druhou odmocninu. Program na vstupu očekává celé číslo. Pokud je jeho odmocnina také celé číslo, vypíše ji. Jinak nevypíše nic. Nesmíte použít funkci math.sqrt, operátor ** a jiné.

Jde hlavně o nápad. Nejlepší možné řešení zvládne najít odmocninu ke $2^n$ na $n$ kroků. Až budete mít kód napsaný, proveďte jednoduchou analýzu časové složitosti. Jde mi o to, abyste si byli schopni uvědomit, jak dlouho program běží. Kód opatřete příslušnými komentáři.

Co jsme dnes probrali

Seznamy

Analýza časové složitosti

Analýza fast.py

Analýza slow.py

Binární vyhledávání

seno = [1, 2, 4, 6, 8, 9, 11, 16, 26, 30]
jehla = 10

delka = len(seno)

# Pouzijeme tzv. metodu dvou jezdcu. Jeden je na zacatku, druhy na konci pole.
# Stred je prumer techto dvou jezdcu.
levy = 0
pravy = delka - 1
stred = (pravy - levy) // 2

# Vsimneme si, ze behem behu algoritmu se levy vzdy posouva doprava a pravy
# doleva. Jakmile se prekryji, muzeme smycku ukoncit.
while pravy > levy:
    # Pri prohledavani muzou nastat tri pripady:

    # Jehla je ve stredu, nasli jsme ji.
    if jehla == seno[stred]:
        print("cislo je v seznamu!")

        # Ukoncime cyklus, protoze dal hledat nemusime.
        break
    elif jehla < seno[stred]:
        # Pokud je jehla v leve polovine, pravy ukazatel nastavime na jednu
        # pozici nalevo do stredu (nalevo, protoze budeme hledat v leve
        # polovine).
        pravy = stred - 1

        # Levy ukazatel zustava na sve pozici, musime ale prepociat stred.
        stred = (pravy + levy) // 2
    else:
        # Analogicky k predchozimu pripadu.
        levy = stred + 1

        stred = (pravy + levy) // 2