Problémy a algoritmy
Obsah cvičení
Pojmy z přednášky: problém, instrukce, algoritmus, časová složitost algoritmu
Pseudokód
Příklady problémů, algoritmů a jejich složitostí.
(z minula) Něco málo k logaritmům, faktoriálů a kombinatorice.
Opakování z přednášky
- problém?
- instrukce?
- algoritmus?
- časová složitost algoritmu?
Zápis algoritmu pseudokódem
Pár základních konstrukcí, které budeme potřebovat. Další na přednášce, případně v Cormen et al.: Introduction to algorithms.
Přiřazení
“Do proměnné a ulož hodnotu b.”
a ← b
x ← 2 * y − 3/5
Podmíněný příkaz
“Pokud platí podmínka, tak udělej …, jinak udělej …”
- if a = b then c ← 1
- print(c je jedna)
- else c ← 2
- print(c je dva)
Odsazení řádků je důležité.
Cykly
Cyklus for
Cyklus s řídící proměnnou.
“Pro i od … do … udělej …”
- for i ← 0 to 10 do
- k ← i * i
- print(k*k)
Cyklus while-do
Cyklus opakující se dokud platí podmínka.
“Dokud platí podmínka opakuj …”
- i ← 0
- while (i <= 10)
- k ← i * i
- print(k*k)
- i++
Cyklus repeat-until
Cyklus opakující se dokud neplatí podmínka, který ale vždy proběhne alespoň jednou.
“Opakuj … dokud neplatí podmínka”
- i ← 0
- repeat
- k ← i * i
- print(k*k)
- i++
- until (i = 11)
Existuje i cyklus do-while, který opakuje činnost, dokud podmínka platí.
Příklady na cvičení
(tabule): Následující problémy popište pomocí možných vstupů a odpovídajících výstupů. Navrhněte a nejprve slovně a poté pseudokódem popište algoritmus pro jejich řešení. Jako má navržený algoritmus časovou složitost?
- Pro zadané číslo n vypište druhé mocniny všech čísel od 1 do n.
- Pro zadané číslo n vypište “násobilku” až do hodnoty n ⋅ n.
- Pro zadané slovo spočítejte, kolikrát obsahuje jednotlivá písmena abecedy (nerozlišujte velikost).
Logaritmy
Stručný přehled toho, co byste měli znát.
(tabule): Význam, graf a pár základních vlastností.
Faktoriál
Stručný přehled toho, co byste měli znát.
(tabule): Význam a graf. Shrnutí pro nás důležitých rysů doposoud zmíněných funkcí.
Kombinatorika
Stručný přehled toho, co byste měli znát.
(tabule): Permutace, variace, kombinace. Permutace a počet pořadí prvků.
Úkoly k procvičení
Následující problémy popište pomocí možných vstupů a odpovídajících výstupů. Navrhněte a nejprve slovně a poté pseudokódem popište algoritmus pro jejich řešení. Algoritmus implementujte v jazyce C.
- Je zadané číslo sudé nebo liché?
- Řešení lineární rovnice a ⋅ x + b = 0.
- Násobení dvou přirozených čísel. Zkuste navrhnout algoritmus používající z aritmetických operací pouze sčítání a odčítání.