Logické programování Prezentace číslo 5.

Slides:



Advertisements
Podobné prezentace
Stavový prostor. • Existují úlohy, pro které není k dispozici univerzální algoritmus řešení • různé hry • problém batohu, problém obchodního cestujícího.
Advertisements

Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
HYPERTEXT PREPROCESSOR. PROGRAMOVÁNÍ. DEFINICE POJMŮ Problém Problém nevyřešený, nežádoucí stav obvykle vyžaduje nějaké řešení Neřešitelný problém Neřešitelný.
Cvičení Úloha 1: Rozhodněte zda posloupnost znaků v poli délky n tvoří palindrom (slovo, které je stejné při čtení zprava i zleva). Př.: [a,l,e,l,a] [a,n,n,a]
Aplikace teorie grafů Základní pojmy teorie grafů
Vzorová písemka Poznámka: Bonusové příklady jsou nepovinné, lze za ně ale získat body navíc. (2 body) Definujte pojem gradient. Vypočítejte gradient funkce.
ALGO – Algoritmizace 1. cvičení
Některé pojmy teorie grafů I. Příklad: log p ABC = u 0 + u A + u B + u C + u AB + u AC A B C.
Genetické algoritmy. V průběhu výpočtu používají náhodné operace. Algoritmus není jednoznačný, může projít více cestami. Nezaručují nalezení řešení.
Medians and Order Statistics Nechť A je množina obsahující n různých prvků: Definice: Statistika i-tého řádu je i-tý nejmenší prvek, tj., minimum = statistika.
Kombinatorické algoritmy
Lineární algebra.
RoBla Číselné soustavy.
Opakování učiva ZÁKLADY INFORMATIKY
Název školy: Základní škola a Mateřská škola Kladno, Vodárenská 2115 Autor: Mgr. Ilona Sadílková Materiál: VY_32_INOVACE_ICT35.01 Téma: Excel Číslo projektu:
Řadicí algoritmy autor: Tadeáš Berkman.
Seminář – Základy programování
Úvod do algoritmizace Obsah: Algoritmus, algoritmizace
Gramatiky a jazyky Přednáška z předmětu Řízení v komplexních systémech
Číselné soustavy david rozlílek ME4B
Matice.
Časová složitost algoritmů
Tento výukový materiál vznikl v rámci Operačního programu Vzdělávání pro konkurenceschopnost 1. KŠPA Kladno, s. r. o., Holandská 2531, Kladno,
Datové typy a struktury
Pre-algebra Antonín Jančařík.
ISO PROGRAMOVÁNÍ Frézování
* Třetí odmocnina Matematika – 8. ročník *
minimalizace kombinační logické funkce Karnaughovou mapou
* Třetí mocnina Matematika – 8. ročník *
Obchodní akademie a Střední odborná škola, gen. F. Fajtla, Louny, p.o. Osvoboditelů 380, Louny Číslo projektu CZ.1.07/1.5.00/ Číslo sady30Číslo DUM.
Úvod do databázových systémů
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Vektorové prostory.
Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu.
Logické programování Přednáška číslo 3.
Teorie čísel Prvočíslo Generování prvočísel: Erathosenovo síto
McEllisova šifra.
Logické funkce dvou proměnných, hradlo
Algoritmizace a programování Algoritmy 1 - Úvod. Základní pojmy Počítačový program Počítačový program zápis zdrojového kódu, kterému rozumí počítač zápis.
MME51 Ekonomicko-matematické metody 5 Prof. RNDr. Jaroslav Ramík, CSc.
Matice Přednáška č.4. Definice: Soubor prvků nazýváme maticí typu i-tý řádek j-tý sloupec prvky matice.
Reprezentace dat v počítači. základní pojmy  BIT označení b nejmenší jednotka informace v paměti počítače název vznikl z angl. BINARY DIGIT (dvojkové.
KURZ ALGORITMIZACE A PROGRAMOVÁNÍ V JAZYCE C Lekce č. 2: Základní pojmy Bc. Radek Libovický.
Složitost algoritmu Vybrané problémy: Při analýze složitosti jednotlivých algoritmů často narazíme na problém, jakým způsobem vzít v úvahu velikost vstupu.
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
Úvod do databázových systémů
POZNÁMKY ve formátu PDF
Výpočty ve statistice – test k procvičení
minimalizace kombinační logické funkce Karnaughovou mapou
Základní pojmy v automatizační technice
Jsme jen dvě a řídíme svět 
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Permutace 1. září 2013 VY_42_INOVACE_190203
Název projektu: Moderní výuka s využitím ICT
Ukládání dat v paměti počítače
Předávání parametrů z příkazové řádky OS (1)
TENTO PROJEKT JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM
Algebraické výrazy: počítání s mnohočleny
Matematická logika 5. přednáška
Podprogramy.
Domácí úkol Pro molekulu morfinu (vzorec si najděte na Internetu) vytvořte: FSR (kořen = atom N) SAR SSSR Popište složitost jednotlivých kroků algoritmu.
Různé algoritmy mají různou složitost
Zlomky a desetinná čísla.
Toky v sítích.
Číselné soustavy a kódy
Gödelova(y) věta(y).
Algebraické výrazy: počítání s mnohočleny
Algoritmizace a datové struktury (14ASD)
minimalizace kombinační logické funkce Karnaughovou mapou
Algoritmizace a datové struktury (14ASD)
Transkript prezentace:

Logické programování Prezentace číslo 5

Práce se seznamy Smazání prvku ze seznamu % smaz(Co,Sez,Vysl) smaz(_,[],[]). % kde nic neni, nic nesmazes smaz(X,[X|T],T). % smaz nalezeny vyskyt smaz(X,[H|T],[H|T1]) :- X\=H, smaz(X,T,T1). % nech "jiny" prvek byt a hledej dal ?- smaz(a,[b,a,b,a],X). X = [b,b,a] ; no

Práce se seznamy Smazání prvku ze seznamu (s chybou) Co když na 3. řádku zapomenu na „různost“? smaz(_,[],[]). smaz(X,[X|T],T). smaz(X,[H|T],[H|T1]) :- /* X\=H, */ smaz(X,T,T1). % nyni se 3. radek muze pouzit kdykoliv!!! ?- smaz(a,[b,a,b,a],X). X = [b,b,a] ; % smazal 1. vyskyt a-cka X = [b,a,b] ; % smazal 2. vyskyt a-cka X = [b,a,b,a] ; % nesmazal nic (viz 3. radek) no

Práce se seznamy Smazání všech výskytů prvku ze seznamu % smaz_all(Co,Sez,Vysl) smaz_all(_,[],[]). smaz_all(X,[X|T],T1) :- smaz_all(X,T,T1). % smaz nalezeny vyskyt a pokracuj dal smaz_all(X,[H|T],[H|T1]) :- X\=H, smaz_all(X,T,T1). ?- smaz_all(a,[b,a,b,a],X). X = [b,b] ; no

Práce se seznamy Postupné (a opakované) mazání prvků Josephova funkce Podle legendy, za panování cisaře Vespasiana, v době bojů mezi Římany a Židy, ukryl se do jeskyně Josephus (Flavius Josephus, židovský vojevůdce a dějepisec) se čtyřiceti svými druhy. Když viděli, že se nemohou zachránit, rozhodli se navzájem pobít. Všech 41 se postavilo do řady a každý třetí byl zabit (tj. 3., 6., 9., ...). Když se došlo na konec řady, pokračovalo se v počítání znovu od začátku (tj. 1., 5., 10.,...). Josephus se svým přítelem nechtěli zemřít, proto se postavili tak, že nakonec zůstali na živu sami dva. Napište program, který bude daný problém řešit obecně pro různá N (počet čísel v řadě) a K (krok, se kterým se odstraňuje z řady další číslo). 

Využití akumulátoru Největší prvek v seznamu čísel % nejvetsi-prvek-seznamu(Sez,Max) max([H|T], Max) :- max(H,T,Max). % max(Docasne-max,Sez,Vysledek) max(Pom,[],Pom). max(Pom,[H|T],Max) :- H>Pom, max(H,T,Max). max(Pom,[H|T],Max) :- H=<Pom, max(Pom,T,Max). ?- max([3,1,4,5,2],M). M = 5 ; no

Práce se seznamy Vytvoření podmnožiny prvků seznamu % podmnozina(Mnozina,Podmnozina) podm([],[]). podm([H|T],[H|V]) :- podm(T,V). % vezmi hlavu a dej ji do podmnoziny podm([H|T],V) :- podm(T,V). % vezmi hlavu a nedavej ji do podmnoziny ?- podm([a,b,c],P). P = [a,b,c] ; P = [b,c] ; P = [a,b] ; P = [b] ; P = [a,c] ; P = [c] ; P = [a] ; P = []

Práce se seznamy Vytknutí prvku ze seznamu % vytkni(Co,Odkud,Zbytek) vytkni(X,[X|T],T). % vytkni prvni prvek, T je zbytek vytkni(X,[H|T],[H|T1]) :- vytkni(X,T,T1). % prvni nech, vytknes nejaky dalsi prvek ?- vytkni(X,[1,2,3],Z). X = 1 , Z = [2,3] ; X = 2 , Z = [1,3] ; X = 3 , Z = [1,2] ; no

Využití vytkni/3 cislo(0). cislo(1). … cislo(9). res2:- cislo(D), cislo(E),E\=D, S1 is D+E, cislo(Y),Y\=E,Y\=D, Y is S1 mod 10, Pr1 is S1//10, cislo(N),N\=Y,N\=E,N\=D, cislo(R),R\=N,R\=Y,R\=E,R\=D, S2 is N+R +Pr1, E is S2 mod 10, Pr2 is S2//10, cislo(O),O\=R,O\=N,O\=Y,O\=E,O\=D, S3 is E+O+Pr2, N is S3 mod 10, Pr3 is S3//10, cislo(S),S\=0,S\=O,S\=R,S\=N,S\=Y,S\=E,S\=D, cislo(M),M\=0,M\=S,M\=O,M\=R,M\=N, M\=Y,M\=E,M\=D, S4 is S+M+Pr3, O is S4 mod 10, M is S4 // 10, write(‘ ‘:S:E:N:D), nl, write(‘ ‘:M:O:R:E), nl, write(‘----------’), nl, write(M:O:N:E:Y), nl. , Úlohy typu generuj a testuj obsahují velkou část kódu, který slouží pouze k zajištění vzájemné různosti čísel. Je to nepřehledné, zdlouhavé, snadno se udělá chyba, ..

Využití vytkni/3 vytkni(X,[X|T],T). vytkni(X,[H|T],[H|T1]) :- vytkni(X,T,T1). % cisla se budou brat ze seznamu res3:- vytkni(D,[1,2,3,4,5,6,7,8,9,0],Z1), vytkni(E,Z1,Z2), % automaticky plati E\=D S1 is D+E, Y is S1 mod 10, Pr1 is S1//10, vytkni(Y,Z2,Z3), % automaticky plati Y\=E,Y\=D vytkni(N,Z3,Z4), % automaticky plati N\=Y,N\=E,N\=D vytkni(R,Z4,Z5), % .... S2 is N+R +Pr1, E is S2 mod 10, Pr2 is S2//10, vytkni(O,Z5,Z6), S3 is E+O+Pr2, N is S3 mod 10, Pr3 is S3//10, vytkni(S,Z6,Z7), vytkni(M,Z7,_), M\=0, S4 is S+M+Pr3, O is S4 mod 10, M is S4 // 10, write(' ':S:E:N:D), nl, write(' ':M:O:R:E), nl, write('-----------------'), nl, write(M:O:N:E:Y), nl. ,

Příklad generuj a testuj Desetice Najděte n-tici čísel, pro kterou platí: na místě jednotek je počet nul v čísle, na místě desítek je počet jedniček, na místě stovek je počet dvojek, …. Pro čtveřici jde např. o kombinace: 0121 (0 trojek, 1 dvojka, 2 jedničky, 1 nula) 0202 (0 trojek, 2 dvojky, 0 jedniček, 2 nuly) Najděte takovou desetici (existuje jediné řešení). Bohužel nepůjde využít vytkni/3 (ale třeba člen/2 )

Využití vytkni/3 Permutace prvků seznamu % vytkni(Co,Odkud,Zbytek) vytkni(X,[X|T],T). vytkni(X,[H|T],[H|T1]) :- vytkni(X,T,T1). % permutace(Seznam,Permutovany-seznam) perm([],[]). perm(S,[X|P]) :- vytkni(X,S,Zb), perm(Zb,P). ?- perm([a,b,c],P). P = [a,b,c] ; P = [c,a,b] ; P = [a,c,b] ; P = [c,b,a] ; P = [b,a,c] ; no P = [b,c,a] ;

Práce se seznamy Otočení seznamu % otoceni-seznamu(Sez,Otoceny-sez) otoc([H|T],O):-otoc(T,T1), spoj(T1,[H],O). % spoj(S1,S2,Vysl) spoj([],S2,S2). spoj([H|T],S2,[H|W]) :- spoj(T,S2,W). ?- otoc([a,l,e,s],O). O = [s,e,l,a]

Práce se seznamy Otočení seznamu – znovu a lépe % otoceni-seznamu(Sez,Otoceny) -rychlejsi alg. otoc2(Sez,Ot) :- otoc(Sez,[],Ot). % otoc(Sez,Pomocna=Stul,Vysledek) otoc([],Ot,Ot). otoc([H|T],Pom,Ot) :- otoc(T,[H|Pom],Ot). ?- otoc([a,l,e,s],O). O = [s,e,l,a]

Praktický rozdíl Praktický rozdíl mezi použitím algoritmu 1 a 2 na seznamu o velikosti N: (čas je uveden ve formátu min:sec:ssec) Rozměr vstupních dat N 3 000 10 000 otoc (n2) 00:14:00 02:40:00 otoc2 (n) 00:00:00 00:00:03

Doba výpočtu pro různé složitosti Čas výpočtu při rychlosti 1 milion operací za vteřinu: Složitost Rozměr vstupních dat n 10 50 100 200 1000 n 10s 50s 100s 200s 1ms n2 2.5ms 10ms 40ms 1s n3 125ms 8s 16min 40s … 2n 1024s 35,7 let 4,0E+16 let 5,1E+46 let  n! 3.6288s 9,6E+50 let 3E+144 let

Možný růst rozměru úlohy při daném zrychlení procesoru Předpokládejme, že v dané chvíli jsme v čase T schopni řešit úlohu o rozměru n=100. Tabulka udává rozměr úlohy řešitelné ve stejném čase T na počítači s x-krát rychlejším procesorem. Složitost Zrychlení procesoru 1 (nyní) 5-krát 10-krát 100-krát 1000-krát n 100 500 1000 10000 100000 n2 223 316 3162 n3 170 215 464 2n 102 103 106 109 n! 101

Práce se seznamy Vygenerování seznamu s posloupností čísel % generuj-seznam-cisel(N,Sez). gen(0,[]). gen(N,[N|T]) :- N>0, N1 is N-1, gen(N1,T). ?- gen(7,S). S = [7,6,5,4,3,2,1] Napište program, který vygeneruje seznam [1,2,..,N] bez použití predikátu otoc/2