Divide-and-Conquer algoritmer

Relaterede dokumenter
Divide-and-Conquer algoritmer

Divide-and-Conquer algoritmer

Divide-and-Conquer algoritmer

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

Algoritmeanalyse. Øvre grænse for algoritme. Øvre grænse for problem. Nedre grænse for problem. Identificer essentiel(le) operation(er)

Dynamisk programmering

Dynamisk programmering

Dynamisk programmering

DM507 Algoritmer og datastrukturer

Søgning og Sortering. Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering. Philip Bille

Søgning og Sortering. Philip Bille

Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning

DM507 Algoritmer og datastrukturer

Grafer og graf-gennemløb

Grafer og graf-gennemløb

Datastrukturer (recap)

Grafer og graf-gennemløb

Danmarks Tekniske Universitet

Algorithms & Architectures I 2. lektion

Algoritmer og invarianter

Grafer og graf-gennemløb

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Datastrukturer (recap)

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Intervalsøgning. Algoritmisk geometri. Motivation for intervaltræer. Intervalsøgning. Lad der være givet en database over ansatte i en virksomhed

Algoritmisk geometri

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Danmarks Tekniske Universitet

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

DM02 Kogt ned. Kokken. Januar 2006

Sortering ved fletning (merge-sort)

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm3: More about recurrences - October 10, 2008

Danmarks Tekniske Universitet

Sortering. Sortering ved fletning (merge-sort) Del-og-hersk. Merge-sort

Grafer og graf-gennemløb

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

DM507 - Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Sammenhængskomponenter i grafer

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer

Rekursion C#-version

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 2 n (log n) 2. 3 n /n 2 n + (log n) 4

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO) Mm2: Rekursive algoritmer og rekurrens - October 12, 2010

Danmarks Tekniske Universitet

Dynamisk programmering. Flere eksempler

Datastrukturer (recap) Datastruktur = data + operationer herpå

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm2: Rekursive algoritmer og rekurrens - October 10, 2008

Danmarks Tekniske Universitet

Dynamisk programmering. Flere eksempler

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Programmering og Problemløsning, 2017

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet. Mandag den 22. marts 2004, kl

Induktive og rekursive definitioner

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

DM13-1. Obligatorisk opgave E.05. Jacob Aae Mikkelsen

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb. Philip Bille

Introduktion Til Konkurrenceprogrammering

Orienterede grafer. Orienterede grafer. Orienterede grafer. Orienterede grafer

BRP Sortering og søgning. Hægtede lister

Orienterede grafer. Orienterede grafer. Orienterede grafer. Vejnetværk

Løs til optimalitet i eksponentiel tid Find tilnærmet løsning i polynomiel tid

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 4 n n 3n n 2 /logn 5 n n (logn) 3n n 2 /logn 4 n n 5 n

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

Skriftlig Eksamen Algoritmer og Datastrukturer 2 (2003-ordning)

Orienterede grafer. Introduktion Repræsentation Søgning Topologisk sortering og DAGs Stærke sammenhængskomponenter Implicitte grafer.

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

DM507 Algoritmer og datastrukturer

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

Rolf Fagerberg. Forår 2012

Danmarks Tekniske Universitet

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n n (log n) 2. n 2 + log n 3 n. n n (log n)

Sortering i lineær tid

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 7 n 1 7 7/n. 7nlogn. 7n 7nlogn n7

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

Danmarks Tekniske Universitet

Rekursion og dynamisk programmering

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

1 Beregnelighed. 1.1 Disposition. 1.2 Præsentation. Def. TM. Def. RE/R. Def. 5 egenskaber for RE/R. Def. NSA. Bevis. NSA!RE. Def. SA. Bevis. SA!

Transkript:

Divide-and-Conquer algoritmer

Divide-and-Conquer algoritmer Det samme som rekursive algoritmer.

Divide-and-Conquer algoritmer Det samme som rekursive algoritmer. 1. Opdel problem i mindre delproblemer (af samme type). 2. Løs delproblemerne ved rekursion (dvs. kald algoritmen selv, men med de mindre input). 3. Konstruer en løsning til problemet ud fra løsningen af delproblemerne. Basistilfælde: Problemer af størrelse O(1) løses direkte (uden rekursion).

Divide-and-Conquer algoritmer Det samme som rekursive algoritmer. 1. Opdel problem i mindre delproblemer (af samme type). 2. Løs delproblemerne ved rekursion (dvs. kald algoritmen selv, men med de mindre input). 3. Konstruer en løsning til problemet ud fra løsningen af delproblemerne. Basistilfælde: Problemer af størrelse O(1) løses direkte (uden rekursion). NB: dette er en generel algoritme-udviklingsmetode, med mange anvendelser.

Divide-and-Conquer algoritmer Det samme som rekursive algoritmer. 1. Opdel problem i mindre delproblemer (af samme type). 2. Løs delproblemerne ved rekursion (dvs. kald algoritmen selv, men med de mindre input). 3. Konstruer en løsning til problemet ud fra løsningen af delproblemerne. Basistilfælde: Problemer af størrelse O(1) løses direkte (uden rekursion). NB: dette er en generel algoritme-udviklingsmetode, med mange anvendelser. For rekursive algoritmer: korrekthed bevises via induktion på inputstørrelse. I detaljer: Korrekthed af store størrelser følger af korrekthed for små størrelser, samt handlingerne involveret i at konstruere en løsning for den store størrelse ud fra løsningerne for de mindre størrelser. Basistilfældet for rekursionen er også basistilfældet for induktionsbeviset.

Divide-and-Conquer eksempler

Divide-and-Conquer eksempler Mergesort: Del input op i to dele X og Y (trivielt). Sorter hver del for sig (rekursion). Merge de to sorterede dele til een sorteret del (reelt arbejde). Basistilfælde: n 1 (trivielt).

Divide-and-Conquer eksempler Mergesort: Del input op i to dele X og Y (trivielt). Sorter hver del for sig (rekursion). Merge de to sorterede dele til een sorteret del (reelt arbejde). Basistilfælde: n 1 (trivielt). Quicksort: Del input op i to dele X og Y så X Y (reelt arbejde). Sorter hver del for sig (rekursion). Returner X efterfulgt af Y (trivielt) Basistilfælde: n 1 (trivielt).

Divide-and-Conquer eksempler Mergesort: Del input op i to dele X og Y (trivielt). Sorter hver del for sig (rekursion). Merge de to sorterede dele til een sorteret del (reelt arbejde). Basistilfælde: n 1 (trivielt). Quicksort: Del input op i to dele X og Y så X Y (reelt arbejde). Sorter hver del for sig (rekursion). Returner X efterfulgt af Y (trivielt) Basistilfælde: n 1 (trivielt). Et andet eksempel er inorder gennemløb af et binært søgetræ.

Divide-and-Conquer mere generelt Del problem op i del-problemer (nyt hver gang) Løs del-problemer med rekursion (fast del) Konstruer løsning til problem ud fra løsningerne til del-problemerne (nyt hver gang). Basistilfælde n = O(1): Løs direkte (nyt hver gang, men altid simpelt).

Divide-and-Conquer mere generelt Del problem op i del-problemer (nyt hver gang) Løs del-problemer med rekursion (fast del) Konstruer løsning til problem ud fra løsningerne til del-problemerne (nyt hver gang). Basistilfælde n = O(1): Løs direkte (nyt hver gang, men altid simpelt). Vi vil nu kigge på hvordan man vurderer køretiden for Divide-and-Conquer algoritmer (rekursive algoritmer).

Divide-and-Conquer, udført arbejde Hvis basistilfælde (n = O(1)): Arbejde Hvis ikke basistilfælde: Arbejde Rekursivt kald Arbejde Rekursivt kald Arbejde (Der behøver ikke altid være to rekursive kald. Nogle rekursive algoritmer har bare eet, og nogle har flere end to).

Divide-and-Conquer, udført arbejde Flow of control (lokalt for eet kald af algoritmen): Basistilfælde Ikke basistilfælde

Divide-and-Conquer, udført arbejde Globalt flow of control: Vi ønsker af finde samlet arbejde = sum af blå bidder.

Rekursionstræer Globalt flow of control = rekursionstræer: Een knude = eet kald af algoritmen.

Rekursionstræer Globalt flow of control = rekursionstræer: Een knude = eet kald af algoritmen. Husk: alle kald på en sti mod roden er i gang samtidig hvert kalds variable og state opbevares (af operativsystemet) på en stak, så kaldenes udførsel blandes ikke sammen. Kald af barn i rekursionstræet = push på stak. Afslutning af et barns udførsel = pop fra stak.

Rekursionstræer og beregning af køretid For en rekursiv algoritme, annoter knuderne i den rekursionstræ med Input størrelsen for kaldet til knude. Det resulterende arbejde udført i denne knude (men ikke i rekursive kald under knuden de bliver selv annoteret med deres udførte arbejde). Find derefter summen af alt arbejde i knuder. Ofte: Sum hvert lag i rekursionstræet sammen for sig. Sum de resulterende værdier for alle lag. Find først højden af træet (antal lag). Eksempler følger.

Divide-and-Conquer eksempler T (n) = 2T (n/2) + cn

Divide-and-Conquer eksempler T (n) = 3T (n/4) + cn2

Divide-and-Conquer eksempler T (n) = T (n/3) + T (2n/3) + cn

Divide-and-Conquer eksempler Ofte gælder een af flg.: Alle lag har lige stor sum, hvorved den samlede sum er antal lag (træets højde) gange denne sum. Lagenes sum aftager eksponentiel nedad gennem lagene, hvorved øverste lag dominerer. Lagenes sum vokser eksponentiel nedad gennem lagene (aftager eksponentielt opad gennem lagene), hvorved nederste lag dominerer. For at finde dette lags sum, skal man kende træets højde.

Divide-and-Conquer eksempler Ofte gælder een af flg.: Alle lag har lige stor sum, hvorved den samlede sum er antal lag (træets højde) gange denne sum. Lagenes sum aftager eksponentiel nedad gennem lagene, hvorved øverste lag dominerer. Lagenes sum vokser eksponentiel nedad gennem lagene (aftager eksponentielt opad gennem lagene), hvorved nederste lag dominerer. For at finde dette lags sum, skal man kende træets højde. En generisk løsning af disse tre cases er præcis indholdet af bogens sætning side 94, kaldet Master Theorem. De fleste rekursive algoritmer har en køretid, som beskrives ved en rekursionsligning, der passer ind i Master Theorem. Ellers må man ræsonnere ud fra rekursionstræet (det kan man også gøre selv om Master Theorem kan bruges, naturligvis).