Algorithms & Architectures I 2. lektion
Design-teknikker: Divide-and-conquer Rekursive algoritmer (Recurrences) Dynamisk programmering Greedy algorithms Backtracking Dagens lektion
Case eksempel: Triple path i N2R Problem: Finde 3 uafhængige veje mellem ethvert par af punkter. Vejene skal være kortest mulige Den længste kortest mulig Summen af længder kortest mulig. Korteste vej er let at finde MEN det virker ikke rigtigt her!
Problem2 med shortest-path approach
Hvad gør vi så? Brute-force approach ( backtracking ). Problem: Eksekveringstid (eksponentielt voksende). Problem ved mere end 164 nodes. Hint: Optimeringer: Udnytte symmetri. Vi kan bruge shortest-path algoritme til at finde den 3. vej. Graf af grad 3 så vi kan kun bruge hvert punkt én gang (hvor giver det problemer)? Det viser sig at 3 * shortest-path algoritme normalt er et godt bud. Vi kan gætte på om det er en optimal løsning? Gættet bruges til at afgrænse max path-length (hvad med max sum?). Vi finder enten den korteste eller den længste vej først.. Og bruger den information når vi finder vej2 eller vej3. Der er flere små observationer, der giver små forbedringer. I dag kan vi regne på over 1000 punkter. Problem: Koden er ulæselig!!!
Lidt mere struktureret Design-teknikker baseret på Aho, Hopcroft, Ullman chapter 10. Alle eksempler beskrevet i bogen, så det er ikke nødvendigt at tage noter. Fokus: Concepter og eksempler. Divide-and-Conquer Dynamic Programming Greedy Algorithms Backtracking (Local Search Algorithms)
Divide-and-conquer Bryd et problem af størrelse n ned til mindre problemer, hvis løsninger kan kombineres til en løsning af det oprindelige problem. Eksempel (miniopgave+tavle): Towers of Hanoi. Merge-sort slides. Men, hey stop lige hvordan beregner vi kompleksiteten af en rekursiv algoritme???? Eksempel (tavle): Multiplikation af heltal. Eksempel (tavle): Tennisturneringer.
Merge sort (1) Ideen med Divide and Conquer er: Divide: Del problemet op i et antal delproblemer Conquer: Løs delproblemerne (rekursivt). Hvis problemets størrelse bliver tilstrækkeligt lille kan det løses trivielt. Combine: Kombinér de opnåede løsninger, så der opnås en løsning på det originale problem. I forhold til Merge Sort kan det siges mere konkret: Divide: Hvis n elementer skal sorteres deles talfølgen ind i to sekvenser på hver n/2 elementer. Conquer: Sorter de to delsegmenter ved at bruge Merge sort rekursivt. Combine: Merge de to (sorterede) delsegmenter for at opnå en sorteret liste. Bemærk: Når en liste har længde 1 bliver problemet trivielt.
Merge sort (2) - overblik
Merge sort (3) Vi kalder funktionen Merge (A,p,q,r), hvor A: Array som vi gerne vil have sorteret p, q, r heltal således at: A[p..q] sorteret A[q+1..r] sorteret Det funktionen gør er at merge de to sorterede arrays til ét sorteret Array, nemlig A[p r]. Bemærk at hvert trin i merge proceduren indeholder n=r-p+1 skridt dvs. Θ (n) altså lineær tid. Vi tager lige og kigger på Pseuo-koden, så kan vi også genopfriske vores viden om loop invarianter.
Merge sort (4)
Merge sort (5)
Merge sort (6) selve algoritmen
Merge sort (7) - effektivitet T(n) køretid for et problem af størrelse n. T(n)= hvis n=1: Det trivielle problem, så Θ (1) hvis n>1: 2T(n/2) +Θ (n) Det kan omskrives til: T(n)= c hvis n=1 2T(n/2)+cn hvis n>1 Hvor c er den tid det tager at løse et problem af størrelse 1, og vi antager det tager samme tid at merge per tal der skal merges. og så har I vel læst kapitel 4 eller jeres matematik fra basis, så I ved at det giver Θ (n lg n) ellers se næste slide
Merge sort (8) - effektivitet
Dynamisk programmering Nogle gange, hvis et problem deles op, er der brug for at løse det samme problem flere gange. Eksempel (på tavle): World Series Odds.
Greedy Algorithms Grådig algoritme: Lokal optimering. Eksempel 1: At give penge tilbage, med færrest muligt mønter: 19 kroner 10+5+2+2 men hvad er algoritmen? Møntsystem: 1kr,5kr,11kr. Giv 15 kroner tilbage virker algoritmen stadigvæk? Greedy algorithms bruges ofte til at producere gode løsninger, hvor alternativet er brute-force. 3 * shortest path i N2R er også et udtryk for en greedy algorithm, Eksempel (tavle): Travelling salesman
Backtracking A systematic, Exhaustive searching technique Eksempel på tavle: Tic-tac-toe (en slags kryds og bolle) Stort eksempel på tavle: Travelling Salesman revisited.
Opgaver Analyser køretiden for Towers of Hanoi algoritmen Gennemgå i fællesskab, på tavlen, kapitel 4.3 (s. 73-75). Bogen side 85: Opgaver 4-1, 4-2