1 Udtømmende søgning. 2 Udtømmende søgning (kombinatorisk søgning) A B C D E F G Eksempel med 7 byer Den rejsende sælgers problem (TSP): En sælger skal.

Slides:



Advertisements
Lignende præsentationer
En lille introduktion Angående links til
Advertisements

Overskrift her Navn på oplægsholder Navn på KU- enhed For at ændre ”Enhedens navn” og ”Sted og dato”: Klik i menulinjen, vælg ”Indsæt” > ”Sidehoved / Sidefod”.
Netværksmøde 27. november 2012  Siden sidst fra ledelse og bestyrelse  Trafik  En orientering  Ny børnepolitik  En orientering  Skolens økonomi 
1 Problemkompleksitet 2 Problemers kompleksitet En ineffektiv algoritme: køretiden vokser eksponentielt med input- størrelsen Et problem, der ikke kan.
Algoritme for anden grads ligninger
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel , , 28
2. gradspolynomier og parabler
1 Rekursion og algoritmedesign. 2 Rekursion Rekursiv definition af X: X defineres i termer af sig selv. Rekursion er nyttig, når en generel version af.
1 Går fra at vil maksimere dækning til at minimere omkostning Det kender vi fra den anden bog Omkostningen er afstanden gange antal enheder der skal transporteres.
Den rejsende sælgers problem
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Minimum Udspændende Træer (MST) [CLRS, kapitel 23]
IS-kurven- Hældning og beliggenhed
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal.
Tema 3: Web-crawler Udvikle Web-crawler, som tager en URI som input og besøger samtlige sider på siten som URI’en peger på. Fx –
Representations for Path Finding in Planar Environments.
1 UNION-FIND. 2 inddata: en følge af heltalspar (p, q); betydning: p er “forbundet med” q uddata: intet, hvis p og q er forbundet, ellers (p, q) Eksempel.
Hex Oplæg til eksamen 28/ Dagsorden Introduktion Præsentation af spillet Vores graf MinimaxDFS/BFS Disjoint sets.
Operativsystemer [3]: Synkronisering og baglåse Datalogi 1F: Forår 2003 Jørgen Sværke Hansen
GP12, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 12 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.
Algoritmer og Datastrukturer 2 Graf repræsentationer, BFS og DFS [CLRS, kapitel ] Gerth Stølting Brodal.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
1 Algoritme til at løse knude P-center problemet Algoritmen brugte set covering problemet Virker derfor kun til knude problemer Vi vil alligevel bruge.
Multi-vejs hobe med ekstra bytes Foredrag: Claus Jensen Projektmedlemmer: Jyrki Katajainen, Fabio Vitale, Claus Jensen.
Claus Brabrand, ITU, Denmark Apr 06, 2010Projekt: “Korteste Veje” Claus Brabrand [ ] ( “FÅP”: First-year Project Course, ITU, Denmark )
1 Maksimal strømning. 2 Strømningsnetværk Et strømningsnetværk (eller blot et netværk) N består af En vægtet, orienteret graf G med ikke-negative heltallige.
Grafer og Algoritmer Rasmus D. Lehrmann DM
Løsning – mergeSort (Effektivitet af sortering) Definition af t(n): t(n)= 2t(n) + n.
… og hvordan vil DIRA gøre alt det?? DIRA hi[15] koncept Med en massiv satsning på hi[15] agter DIRA at opnå: -Flere udstillere blandt DIRAs medlemmer.
Fall 2008NOEA - Computer Science1 Lektion 8: Læringsmål Redegøre for begreber og terminologi i forbindelse med grafer. Redegøre for forskellige anvendelser.
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel 2.3, , problem 30.1.c] Gerth Stølting Brodal.
18. Strategisk analyse af interne forhold
Lektion 7 Læsestof: Kopier fra Caranno
1 Algoritmisk geometri. 2 Intervalsøgning 3 Motivation for intervaltræer Lad der være givet en database over ansatte i en virksomhed Alder Løn Ansættelsesdato.
FEN KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.
1 Grafalgoritmer I. 2 Plan Grafer - definition - anvendelser - terminologi - eksempler på grafproblemer Grafgennemgang - dybde-først-gennemgang - bredde-først-gennemgang.
Grafer.
1 Anvendelser III Grafer. 2 Terminologi Repræsentation Traversering Korteste vej Topologisk sortering Problemkompleksitet og afgørlighed Plan.
Grafalgoritmer II.
1 Sortering. 2 Sortering ved fletning (merge-sort) 7 2 | 9 4  | 2  2 79 | 4   72  29  94  4.
Algoritmer og Datastrukturer 2
Algoritmer og Datastrukturer 2 Topologisk Sortering, Stærke Sammenhængskomponenter [CLRS, kapitel ] Gerth Stølting Brodal.
1 Anvendelser III Grafer. 2 Terminologi Repræsentation Traversering af grafer Korteste vej Topologisk sortering Problemkompleksitet og afgørlighed Plan.
Økonometri 1: Dummy variable1 Økonometri 1 Dummy variable 24. marts 2003.
1 Korteste veje. 2 Vægtede grafer I en vægtet graf har enhver kant tilknyttet en numerisk værdi, kaldet kantens vægt Vægte kan repræsentere afstande,
Algoritmer og Datastrukturer 2 Graf repræsentationer, BFS og DFS [CLRS, kapitel ] Gerth Stølting Brodal Aarhus Universitet.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Korteste Veje [CLRS, kapitel 24]
Algoritmer og Datastrukturer 2 Graf repræsentationer, BFS og DFS [CLRS, kapitel ] Gerth Stølting Brodal.
Algoritmer og Datastrukturer 2 Graf repræsentationer, BFS og DFS [CLRS, kapitel ] Gerth Stølting Brodal.
Algoritmer og Datastrukturer 2 Del-og-kombiner [CLRS, kapitel , , 28
Deadlock Definition deadlock (baglås) er en tilstand som en mængde af processer kan være i en mængde processer er i deadlock hvis alle processerne står.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Korteste Veje [CLRS, kapitel ]
Clicker Test a)Ja b)Nej c)Ved ikke. Algoritmer og Datastrukturer 2 Graf repræsentationer, BFS og DFS [CLRS, kapitel ] Gerth Stølting Brodal.
 Jens Bennedsen 2002Objektorienteret systemudvikling Persistens.
Algoritmer og Datastrukturer 2 Topologisk Sortering, Stærke Sammenhængskomponenter [CLRS, kapitel ] Gerth Stølting Brodal.
Algoritmer og Datastrukturer 2 Graf repræsentationer, BFS og DFS [CLRS, kapitel ] Gerth Stølting Brodal.
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Algoritmer og Datastrukturer 2 Graf repræsentationer, BFS og DFS [CLRS, kapitel ] Gerth Stølting Brodal Aarhus Universitet.
Algoritmer og Datastrukturer 2 Topologisk Sortering, Stærke Sammenhængskomponenter [CLRS, kapitel ] Gerth Stølting Brodal Aarhus Universitet.
Single-Source Shortest Path i ekstern hukommelse Jonas Thomsen Ph.d. studerende Kvalifikationseksamen 27. september 2004.
I o p o DAIMI, AU, November 1999Introducerende objektorienteret programmering9D.1 Del, løs og kombinér.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Korteste Veje [CLRS, kapitel 24, ]
Del, løs og kombinér Et algoritmemønster.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Korteste Veje [CLRS, kapitel ]
DIRA Airlines ønsker alle en god rejse!!! Ændringer vil forekomme DIRA hi[15] koncept Eller gå ind på:
I det efterfølgende vil vi prøve at opnå forbindelse til de knapper som er på boardet. Opgaven er at vi ved at trykke på knapperne kan få lyset til at.
2017.
Algoritmer og Datastrukturer 2
Grundlæggende Algoritmer og Datastrukturer
Grundlæggende Algoritmer og Datastrukturer
Det lydløse terningekast
Præsentationens transcript:

1 Udtømmende søgning

2 Udtømmende søgning (kombinatorisk søgning) A B C D E F G Eksempel med 7 byer Den rejsende sælgers problem (TSP): En sælger skal besøge N byer Find den korteste rundtur Systematisk gennemsøgning af alle potentielle løsninger

3 Problem med 4461 byer Find den korteste rundtur

4 Udtømmende søgning i grafer Samtlige rundture kan bestemmes således: (1a) Generer systematisk samtlige simple veje i grafen (1b) Vælg heraf dem, der omfatter samtlige grafens knuder, og hvor første og sidste knude er forbundet med en kant Mulig metode til løsning af TSP: (1) Generer samtlige rundture (Hamilton-cykler) i grafen (2) Vælg den korteste af disse

5 Kan opnås ved en lille ændring af metoden DFS til dybde-først-søgning i en graf Systematisk generering af alle simple veje i en graf Kald: DFS(G, v) hvor v er en vilkårlig knude i G Metoden “rydder op efter sig selv”, således at alternative veje kan undersøges Algorithm DFS(G, v) setLabel(v, VISITED) for all e  G.incidentEdges(v) w  opposite(v,e) if getLabel(w)  UNEXPLORED DFS(G, w) setLabel(v, UNEXPLORED)

6 Eksempel på søgning A B C G F D E H I J K L M A B F G C DD EEH E F BC G L C FL I F G LECB H JMB D J M K D H J M CG LE D IK MJ D B K MJ J I K M J HJM G L KIK FC IK LM K I K I K M J H J MJ H I HI EM L J H I K IK IKMJLM G H HC F E L M GH J H I K I K ML G B D CF M LG L MGH J H I B D L M G L M G H B D F C D B L M GF C rundtur 153 knuder (kald af DFS)

7 Generering af alle simple veje i en graf repræsenteret ved en nabomatrix void dfs(int k) { pos[k] = ++level; for (int t = 1; t <= V; t++) if (w[k][t] != 0 && pos[t] == 0) dfs(t); level--; pos[k] = 0; } level = 0; for (int k = 1; k <= V; k++) pos[k] = 0; dfs(1); w[k][t] betegner vægten på kanten ( k, t ). Værdien 0 angiver, at kanten ikke findes level angiver antallet af knuder på den aktuelle vej pos[k] angiver positionen for knude k på denne vej

8 Løsning af TSP level = 0; for (int k = 1; k <= V; k++) pos[k] = 0; cost = 0; best_cost = Integer.MAX_VALUE; dfs(1); void dfs(int k) { pos[k] = ++level; if (level == V && w[k][1] != 0 && cost < best_cost) { best_cost = cost; System.arraycopy( best_pos, 1, pos, 1, V); } for (int t = 1; t <= V; t++) if (w[k][t] != 0 && pos[t] == 0) { cost += w[k][t]; dfs(t); cost -= w[k][t]; } level--; pos[k] = 0; }

9 Beskæring af søgetræet Beskæring: fjernelse af undertræer Eksempel: fjernelse af symmetrier: Forlang, at 3 knuder kommer i en bestemt rækkefølge Kravet A ->... -> C ->... -> B ->... beskærer træet F A F G D EEH CG L CF LI B H JMB D J M K D IK MJ D KM J J KIK F IK LM J H I HI EM L LM G H HC F E ML G B D CF B D B D F C D rundtur Besparelse: 81 kald af dfs

10 void dfs(int k) { pos[k] = ++level; for (int t = 1; t <= V; t++) if (w[k][t] != 0 && pos[t] == 0 && (t != 3 || pos[2] != 0)) dfs(t); level--; pos[k] = 0; } Implementering af beskæring Besøg kun knude 3, hvis knude 2 er besøgt

11 Yderligere beskæring Beskær en gren, hvis de ubesøgte knuder ikke er forbundne F A F G D EEH I K J LM L E CF B D D Besparelse: yderligere 52 kald af dfs rundtur A B C G F D E H I J K L M

12 Forgren-og-begræns (branch-and-bound) En metode til reduktion af søgningen ved løsning af optimeringsproblemer De partielle løsningers omkostninger beregnes og benyttes til beskæring af søgetræet Eksempel: Hvis alle omkostninger for TSP er positive, kan en søgningen ad en vej afbrydes, hvis omkostningen for vejen er større end eller lig med den hidtil korteste rundtur for (int t = 1; t <= V; t++) { if (w[k][t] != 0 && pos[t] == 0 && cost + w[k][t] < best_cost) { cost += w[k][t]; dfs(t); cost -= w[k][t]; }

13 Generel beskæringsmetode Hvis omkostningen for en partiel løsning, plus en nedre grænse for omkostningen for en færdiggørelse til en komplet løsning, er større end en øvre grænse for en løsning, så vil den partielle løsning ikke kunne færdiggøres til en optimal løsning En nedre grænse for TSP udgør omkostningen af et MST (Minimal Spanning Tree) for de ubesøgte knuder, plus de to korteste kanter, der forbinder de to endeknuder i den partielle tur med to ubesøgte knuder MST Partiel tur

14 Baksporing (backtracking) En problemløsningmetode til systematisk generering af alle mulige løsninger Sålænge det er muligt, udvides en partiel løsning Hvis en partiel løsning ikke kan udvides, “bakspores”, d.v.s. vendes tilbage til en tidligere partiel løsning, for hvilken der findes en uprøvet udvidelsesmulighed På denne måde bevæger algoritmen sig forlæns og baglæns, indtil en løsning er fundet, eller alle muligheder er udtømte.

15 void try(...) { for (alle_kandidater) if (kandidat_acceptabel) { registrer_kandidat; if (ufuldstændig_løsning) try(...); if (løsning_fundet) return; slet_registrering; } void try(...) { for (alle_kandidater) if (kandidat_acceptabel) { registrer_kandidat; if (ufuldstændig_løsning) try(...); if (løsning_fundet) return; slet_registrering; } Skabelon til baksporing

16 8-dronningeproblemet Placer 8 dronninger på et skakbræt, således at der ikke findes to dronninger, der kan slå hinanden (d.v.s. der er ikke to dronninger i samme række, søjle eller diagonal)

17 Search: for (c1 = 1; c1 <= 8; c1++) for (c2 = 1; c2 <= 8; c2++) for (c3 = 1; c3 <= 8; c3++) for (c4 = 1; c4 <= 8; c4++) for (c5 = 1; c5 <= 8; c5++) for (c6 = 1; c6 <= 8; c6++) for (c7 = 1; c7 <= 8; c7++) for (c8 = 1; c8 <= 8; c8++) if (isSolution(c1, c2, c3, c4, c5, c6, c7, c8)) { printSolution(); break Search; } Search: for (c1 = 1; c1 <= 8; c1++) for (c2 = 1; c2 <= 8; c2++) for (c3 = 1; c3 <= 8; c3++) for (c4 = 1; c4 <= 8; c4++) for (c5 = 1; c5 <= 8; c5++) for (c6 = 1; c6 <= 8; c6++) for (c7 = 1; c7 <= 8; c7++) for (c8 = 1; c8 <= 8; c8++) if (isSolution(c1, c2, c3, c4, c5, c6, c7, c8)) { printSolution(); break Search; } Ineffektiv og ufleksibel løsningsmetode

18 void try(int row) { for (int col = 1; col <= 8; col++) { if (!underAttack(row, col)) { setQueen(row, col); if (row == 8) solutionFound = true; else try(row + 1); if (solutionFound) return; removeQueen(row, col); } void try(int row) { for (int col = 1; col <= 8; col++) { if (!underAttack(row, col)) { setQueen(row, col); if (row == 8) solutionFound = true; else try(row + 1); if (solutionFound) return; removeQueen(row, col); } Løsning med baksporing solutionFound = false; try(1); if (solutionFound) printSolution();

19 Datastrukturer Repræsentation af aktuel stilling: int q[]; boolean up[], down[]; q[col] == row, hvis der er placeret en dronning i søjlen col med rækkenummeret row ; ellers 0 up[col+row-2] == true, hvis og kun hvis der er placeret en dronning på opad-diagonalen ( ) med nummer col+row-2 down[col-row+7] == true, hvis og kun hvis der er placeret en dronning på nedad-diagonalen ( ) med nummer col-row+7.

20 void try(int row) { for (int col = 1; col <= 8; col++) { if (q[col] == 0 && !up[row+col-2] && !down[col-row+7]) { q[col] = row; up[row+col-2] = down[col-row+7] = true; if (row == 8) solutionFound = true; else try(row+1); if (solutionFound) return; q[col] = 0; up[row+col-2] = down[col-row+7] = false; } void try(int row) { for (int col = 1; col <= 8; col++) { if (q[col] == 0 && !up[row+col-2] && !down[col-row+7]) { q[col] = row; up[row+col-2] = down[col-row+7] = true; if (row == 8) solutionFound = true; else try(row+1); if (solutionFound) return; q[col] = 0; up[row+col-2] = down[col-row+7] = false; } Færdig udgave af try

21 Primitiver til baksporing Er implementeret til C, C++, Pascal og Simula af Keld Helsgaun Findes ikke til Java backtrack() signalerer, at problemet ikke kan løses med de hidtil trufne valg choice(n) repræsenterer et valg imellem n alternativer Metoden returnerer heltal imellem 1 og n

22 for (int row = 1; row <= 8; row++) { int col = choice(8); if (q[col] != 0 || up[row+col-2] || down[col-row+7]) backtrack(); q[col] = row; up[row+col-2] = down[col-row+7] = true; } printSolution(); for (int row = 1; row <= 8; row++) { int col = choice(8); if (q[col] != 0 || up[row+col-2] || down[col-row+7]) backtrack(); q[col] = row; up[row+col-2] = down[col-row+7] = true; } printSolution(); Løsning ved brug af primitiverne

23 Approksimative algoritmer Køretiden for baksporingsalgoritmer er eksponentiel Hvis hver knude i gennemsnit har  sønner, og længden af en løsningsvej er N, så er køretiden  N I nogle tilfælde behøves ikke en optimal løsning - en “rimelig god” løsning er tilstrækkelig En approksimativ algoritme tilstræber at opnå en “rimelig god” løsning på kort tid - sædvanligvis med et polynomielt tidsforbrug

24 Permutationer En algoritme til systematisk generering af samtlige permutationer af tallene fra 1 til N kan udledes direkte fra algoritmen til udtømmende søgning i en graf Når udtømmende søgning anvendes på en komplet graf, så gennemløbes alle knuder i enhver mulig rækkefølge void dfs(int k) { perm[k] = ++level; if (level == V) use(perm); for (int t = 1; t <= V; t++) if (perm[t] == 0) dfs(t); level--; perm[k] = 0; }