Hledání prvočísel, reference v Pythonu, list comprehensions
Lekce 09
Úlohy
Eratosthenovo síto
Zkuste si naimplementovat algoritmus popsaný na hodině. Příště se o řešeních pobavíme.
Co jsme probrali
Eratosthenovo sito
- Rychlý algoritmus na nalezení prvočísel od 1 do $n$.
- Má časovou složitost $\mathcal{O}(n\log{\log{n}})$ (skorolineární)
- Postupně vyškrtáváme násobky čísel, tím nám zbydou pouze prvočísla.
- Příští týden se podíváme na řešení
Referenční sémantika
- Co program vypíše?
a = [1, 2, 3]
b = a
b.append(4)
print(a)
c = "Hello"
d = c
d = "World"
print(c)
- Python pracuje se dvěma paměťmi
- Stack (nástěnka s lepíky, které říkají, co je v jaké krabici)
- Jeden lepík odkazuje na jednu krabici
- Heap (krabice ve skladu)
- Stack (nástěnka s lepíky, které říkají, co je v jaké krabici)
- Když vytvoříme proměnnou, nějak ji nazveme (jméno na lepíku) a přiřadíme do ní nějaká data (krabice ve skladu)
- Některé krabice jsou znovuotevíratelné (mutable), některé jsou zapečetěné a nemůžeme do nich nic přidávat nebo jinak jejich obsah měnit (immutable)
- Co když chceme ale kopírovat místo vytváření další reference? Použijeme
metodu
copy()
List comprehension
- Způsob, jak vytvořit nový seznam (slovník)
- Pokud vytváříme (plníme) nový seznam pomocí for cyklu, můžeme použít mnohdy kompaktnější a čitelnější zápis