130 likes | 255 Views
ALGORITMIZACE ÚVODNÍ PŘEDNÁŠKA. SLOVO ALGORITMUS VZNIKLO ZE JMÉNA ARABSKÉHO MATEMATIKA AL-KHWARIZMIHO, KTERÝ V DEVÁTÉM STOLETÍ SEPSAL ROZSÁHLOU KOLEKCI ALGORITMŮ.
E N D
SLOVO ALGORITMUS VZNIKLO ZE JMÉNA ARABSKÉHO MATEMATIKA AL-KHWARIZMIHO, KTERÝ V DEVÁTÉM STOLETÍ SEPSAL ROZSÁHLOU KOLEKCI ALGORITMŮ. POČÍTAČOVÉ ALGORITMY MAJÍ VĚTŠINOU PODOBU PROGRAMŮ. PROTOŽE SE TERMÍN ALGORITMUS VZTAHUJE SPÍŠE K POSLOUPNOSTI OPERACÍ NEŽ KE KONKRÉTNÍMU ZPŮSOBU, JAKÝM JSOU POPSÁNY, JE MOŽNÉ VYJÁDŘIT STEJNÝ ALGORITMUS V MNOHA RŮZNÝCH PROGRAMOVACÍCH JAZYCÍCH.
EUKLIDOVA ÚLOHA • Úloha: najděte největšího společného dělitele čísel 6 a 15 Řešení: • Popišme postup tak, aby byl použitelný pro dvě libovolná přirozená čísla, nejen pro 6 a 15: • označme zadaná čísla x a y a menší z nich d • není-li d společným dělitelem x a y, pak zmenšíme d o 1, test opakujeme a skončíme, až d bude společným dělitelem x a y Poznámka: • Význam symbolů x, y a d použitých v algoritmu: • jsou to proměnné (paměťová místa), ve kterých je uložena nějaká hodnota, která se může v průběhu výpočtu měnit
ŘEŠENÍ Úloha: najděte největšího společného dělitele čísel 6 a 15 krok x y d poznámka 6 15 ? zadání vstupních dat 1 6 15 6 2 6 156d není dělitelem y, proveď krok 3 3 6 15 5 2 6 15 5d není dělitelem x, proveď krok 3 3 6 15 4 2 6 15 4d není dělitelem x ani y, proveď krok 3 3 6 15 3 2 6 15 3d je dělitelem x i y, proveď krok 4 4 6 15 3 výsledek je hodnota 3
ZOBECNĚNÍ • Úloha: najděte největšího společného dělitele • Přesnější popis: Vstup: přirozená čísla x a y Výstup: nsd(x,y) Postup: 1. Je-li x<y, pak d má hodnotu x, jinak dmá hodnotu y 2. Opakuj krok 3, pokud d není dělitelem x nebo d není dělitelem y 3. Zmenši d o 1 4. Výsledkem je hodnota d • Sestavili jsme algoritmus pro výpočet největšího společného dělitele dvou přirozených čísel
NAVRHNĚTE ALGORITMUS PRO PŘÍPRAVU KÁVY 1.UVAŘIT KÁVU 2. ZAPNOUT SPORÁK 3. UVAŘIT NEZBYTNÉ MNOŽSTVÍ VODY 4. NASYPAT MLETOU KÁVU DO ŠÁLKU 5. ZALÍT KÁVU VAŘÍCÍ VODOU 6. OSLADIT PODLE CHUTI 7. POČKAT, NEŽ KÁVA ZÍSKÁ PŘÍSLUŠNÉ AROMA.
VZESTUPNÉ SETŘÍDĚNÍ BALÍČKU KARET 1. KARTU VYJMEME A TA SE STANE PRVNÍ KARTOU SETŘÍDĚNÉHO BALÍČKU. PAK HLEDÁME NEJMENŠÍ KARTU VE ZBYTKU BALÍČKU. POSTUP SE OPAKUJE, DOKUD NEVYČERPÁME NESETŘÍDĚNÉ KARTY. PROTOŽE MÁME n KARET, Z NICHŽ PRO KAŽDOU POTŘEBUJEME n POROVNÁNÍ, ALGORITMUS JE ŘÁDU n^2. 2. REKURZIVNÍ TŘÍDĚNÍ – PROJDEME BALÍČKEM JEDNOU A PŘEMÍSTÍME KARTY S HODNOTOU MENŠÍ NEŽ PRŮMĚR DO SPODNÍ POLOVINY BALÍČKU; KARTY S NADPRŮMĚRNÝMI HODNOTAMI ZŮSTANOU V HORNÍ POLOVINĚ. PAK KAŽDOU POLOVINU BALÍČKU SETŘÍDÍME STEJNÝM ALGORITMEM. REKURZIVNÍ POUŽITÍ ALGORITMU NA OBĚ POLOVINY BALÍČKU ZNAMENÁ JEHO REKURZIVNÍ POUŽITÍ NA KAŽDOU POLOVINU PŮLBALÍČKŮ ATD. KAŽDÝ REKURZIVNÍ KROK PŮLÍ POČET KARET, KTERÉ SE MAJÍ TŘÍDIT; REKURZE KONČÍ, ZBÝVÁ-LI JEDINÁ KARTA – V TOM PŘÍPADĚ JE JIŽ SETŘÍDĚNÁ. VZHLEDEM K TOMU, ŽE ALGORITMUS ZAHRNUJE OPAKOVANÉ DĚLENÍ KARET, DOKUD NEMÁME POUZE JEDINOU , POTŘEBUJE ČAS ÚMĚRNÝ TOMU, KOLIKRÁT LZE ROZDĚLIT n KARET – JINÝMI SLOVY DVOJKOVÝ LOGARITMUS POČTU KARET
ELEGANTNĚJŠÍ ALGORITMUS EXISTUJE ELEGANTNĚJŠÍ REKURZIVNÍ ALGORITMUS, PRO KTERÝ NEPOTŘEBUJEME, ABY BYLY KARTY SEKVENČNĚ OČÍSLOVÁNY; JE VHODNÝ NAPŘ. K SEŘAZENÍ VELKÉHO POČTU VIZITEK. ALGORITMUS SE NAZÝVA MERGE SORT ( TŘÍDĚNÍ SLÉVÁNÍM) TŘÍDĚNÍ SLÉVÁNÍM TĚŽÍ ZE SKUTEČNOSTI, ŽE JE JEDNODUCHÉ SLÍT DVA JIŽ SETŘÍDĚNÉ SLOUPEČKY DO JEDNOHO (ROVNĚŽ SETŘÍDĚNÉHO) TAK, ŽE POSTUPNĚ BEREME NEJVYŠŠÍ KARTY Z JEDNOHO NEBO DRUHÉHO SLOUPCE (VŽDY BEREME TU VYŠŠÍ).POKUD SLOUPEC SESTÁVÁ Z JEDINNÉ KARTY , PAK JE JIŽ SETŘÍDĚNÝ. JINAK ROZDĚL SLOUPEC NA DVA A REKURZIVNĚ POUŽIJ „MERGE SORT“ K SETŘÍDĚNÍ OBOU POLOVIN A JEJICH ZKOMBINOVÁNÍ S VYUŽITÍM VÝŠE POPSANÉ PROCEDURY
PROBLÉM OBCHODNÍHO CESTUJÍCÍHO DOMÁCÍ ÚKOL
End of Lecture Good Night.