Rekursion. Rekursiv lösningsstrategi. Algoritmkonstruktion. Exempelproblem Hitta största elementet i en sekvens v i där i 1... n.

Relevanta dokument
Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 12. Söndra och härska

Föreläsning 5: Dynamisk programmering

Datastrukturer och algoritmer

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Föreläsning 12. Söndra och härska

Datastrukturer och algoritmer

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

Tommy Färnqvist, IDA, Linköpings universitet

Grundläggande datalogi - Övning 3

Föreläsning 13. Dynamisk programmering

Föreläsning 8 Innehåll

Tommy Färnqvist, IDA, Linköpings universitet

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Optimering Kruskal s algoritm Prim-Jarník s algoritm

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Föreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering

Problemlösning och funktioner Grundkurs i programmering med Python

Rekursion och induktion för algoritmkonstruktion

Lösning till tentamensskrivning på kursen Diskret Matematik, moment A, för D2 och F, SF1631 och SF1630, den 10 januari 2011 kl

Datastrukturer och algoritmer

Föreläsning 6 Innehåll. Rekursion. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursiv problemlösning. Rekursion. Rekursivt tänkande:

Föreläsning 11 Datastrukturer (DAT037)

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Sortering. Brute-force. Sortering Ordna element enligt relation mellan nyckelvärden

Rekursion och induktion för algoritmkonstruktion

Föreläsning 11: Rekursion

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Vad har vi pratat om i kursen?

Algoritmer, datastrukturer och komplexitet

729G04 Programmering och diskret matematik. Python 3: Loopar

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Lösningsförslag till tentamensskrivning i SF1610 Diskret Matematik för CINTE 30 maj 2018, kl

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Föreläsning 1, vecka 7: Rekursion

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Övning 2. (Länkade) Listor, noder

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Giriga algoritmer och dynamisk programmering

Grundläggande Datalogi

Dekomposition och dynamisk programmering

Mer till P-uppgiften: Dokumentation. Nyheter. Algoritm för sökning. Mer hjälp. DD1311 Programmeringsteknik med PBL

Exempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,

Föreläsning 9. Sortering

Rekursion och induktion för algoritmkonstruktion

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Tenta i Grundläggande programmering DD klockan

Föreläsning 13. Rekursion

Träd Hierarkiska strukturer

Pythons standardbibliotek

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Föreläsning 6: Introduktion av listor

Tentamen Datastrukturer D DAT 036/INN960

Några satser ur talteorin

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Kappa 2014, lösningsförslag på problem 5

Tentamen Datastrukturer D DAT 036/INN960

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Datalogi, grundkurs 1

Algoritmer, datastrukturer och komplexitet

För att få första och sista elementet i en lista kan man använda First och Last

Tentamen kl Uppgift 4. Uppgift 5

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Lösning till tentamensskrivning i Diskret Matematik, SF1610 och 5B1118, torsdagen den 21 oktober 2010, kl

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

1, 2, 3, 4, 5, 6,...

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

Tentamen i Digitalteknik, EITF65

Algoritmer, datastrukturer och komplexitet

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Föreläsning Datastrukturer (DAT037)

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

TDIU01 - Programmering i C++, grundkurs

Lösningsförslag till Tentamen i 5B1118 Diskret matematik 5p 22 augusti, 2001

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 7 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Grafer och grannmatriser

Algoritmer, datastrukturer och komplexitet

Föreläsning 11. Giriga algoritmer

Talteori. 1 Grundbegrepp och kongruenser Talföljder och rekursion 6 3 Induktionsbevis Fraktaler.16 Facit.. 18

Hjalpmedel: Inga hjalpmedel ar tillatna pa tentamensskrivningen. 1. (3p) Los ekvationen 13x + 18 = 13 i ringen Z 64.

TDDC74 Programmering: Abstraktion och modellering Dugga 1, kl 14-16

KOMBINATORIK. Exempel 1. Motivera att det bland 11 naturliga tal finns minst två som slutar på samma

Kombinatorik. Kapitel 2. Allmänt kan sägas att inom kombinatoriken sysslar man huvudsakligen med beräkningar av

M0038M Differentialkalkyl, Lekt 15, H15

Diskreta Linjära System och Skiftregister

Föreläsning 13. Dynamisk programmering

Kapitel 2. Grundläggande sannolikhetslära

Matematik 5 Kap 2 Diskret matematik II

Grundläggande datalogi - Övning 4

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Transkript:

Rekursion Dubbel Algoritmkonstruktion Rekursiv lösningsstrategi Vanliga strategier Brute-Force (ren råstyrka) Gå igenom alla fall Greedy (girig strategi) Välj nästa steg efter vad som lokalt verkar bäst Exempelproblem Hitta största elementet i en sekvens v i där i 1... n Antag att vi redan känner m = max v i i 1... n 1 Lösningen blir då det största elementet av m och v n Divide-and-Conquer (söndra och härska) Bryt sönder problemet i mindre delar Sekvensen blir mindre i en Bestäm ett basfall för en liten sekvens Sekvenser med ett element: max[v 1 ] = v 1

Rekursiv lösningsstrategi Rekursiv lösningsstrategi def max( v ) : i f l e n ( v ) == 1 : return v [ 0 ] m = max( v [ 1 : ] ) i f v [ 0 ] > m: return v [ 0 ] return m Problem Beräkna n-fakultet: n! = i 1...n Antag att vi redan känner (n 1)! Lösningen blir då n! = n (n 1)! i Talen blir mindre i en Bestäm ett basfall för en litet tal 0! = 1 Rekursiv lösningsstrategi def f a c t ( n ) : return n f a c t ( n 1) def exp ( b, n ) : return b exp ( b, n 1)

def exp ( b, n ) : tmp = exp ( b b, n //2) i f n%2 == 1 : return b tmp return tmp Kombinatoriskt problem På hur många sätt kan en kedja med n länkar nå d steg bort? n = 10 Dubbel d = 5 Antag att vi redan vet svaret för n 1 Dubbel Rekursionsformel Dubbel n = 9, d = 5 f (n, d) = f (n 1, d 1) + f (n 1, d) + f (n 1, d) n = 9, d = 4 n = 9, d = 5 d < 0 0 n < d 0 n = d 1 d = 5

def f o l d ( n, d ) : i f d < 0 : i f n < d : i f n == d : return \ f o l d ( n 1, d 1) + \ 2 f o l d ( n 1, d ) Dubbel Kombinatoriskt problem På hur många sätt kan man växla en hundring? Antag att det finns obegränsade mängder av bestämda valörer, t.ex. 50-lappar, 20-lappar, 10-kronor, 5-kronor, enkronor. Ordningen på valörerna är irrelevant. Dubbel Dubbel Rekursionsformel Dubbel Antag att vi redan vet svaret för alla mindre belopp än 100 kr. Antag även att vi redan vet svaret för färre valörer, t.ex. när det inte finns några 50-lappar. f (a, m) = f (a, m[1..n]) + f (a m 0, m) där a är önskat belopp och m är en lista med valörer. Två disjunkta fall: 1. Alla sätt att växla där första valören används 2. Alla sätt att växla utan första valören a < 0 0 a = 0 1 m = [] 0

def change ( amount, c o i n s ) : i f amount < 0 : i f amount == 0 : i f l e n ( c o i n s ) == 0 : return \ change ( amount, c o i n s [ 1 : ] ) + \ change ( amount c o i n s [ 0 ], c o i n s ) Dubbel >>> import change >>> change. change (100, (50, 20, 10, 5, 1 ) ) 343 Dubbel def change ( amount, c o i n s, used ) : i f amount < 0 : return [ ] i f amount == 0 : return [ used ] i f l e n ( c o i n s ) == 0 : return [ ] return \ change ( amount, c o i n s [ 1 : ], used ) + \ change ( amount c o i n s [ 0 ], c o i n s, \ used +[ c o i n s [ 0 ] ] ) Dubbel Hur hittar man stora primtal? lilla sats Om p är ett primtal så gäller: a p mod p = a 1 a < p Observation: Om p inte är ett primtal så gäller oftast a p mod p a Prova med flera a. Risken att alla passerar testen för ett icke-primtal är minimal.

from random import r a n d i n t def f e r m a t t e s t ( p, a ) : return a p % p == a Problem a p är ett orimligt stort tal för stora p def i s P r i m e ( p ) : f o r i i n range ( 1 0 ) : i f not f e r m a t t e s t ( p, r a n d i n t ( 2, p 1)): return F a l s e return True Lösning Alla delberäkningar kan utföras modulo p. def expmod ( b, n, m) : tmp = expmod ( b b % m, n //2, m) i f n%2 == 1 : return ( b tmp ) % m return tmp