IN2010: Algoritmer og Datastrukturer Series 2

Like dokumenter
Løsningsforslag 2017 eksamen

Grunnleggende Grafteori

Graphs similar to strongly regular graphs

INF Algoritmer og datastrukturer

Object [] element. array. int [] tall

Slope-Intercept Formula

EKSAMEN med løsningsforslag

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Neural Network. Sensors Sorter

IN Algoritmer og datastrukturer

Dynamic Programming Longest Common Subsequence. Class 27

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

EKSAMEN. Algoritmer og datastrukturer

GRAF-TRAVERSERING. Hvordan utforske en labyrint uten å gå seg vill. Rekkefølge på kanter: Dybde-Først Søk A B C D E F G H I J K L M N O P

INF Løsning på seminaropppgaver til uke 8

Løsningsforslag til INF110 h2001

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

Løsningsforslag til eksamen i INF1000 våren 2006

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Magnus Moan (Undertegnede) Enkle datastrukturer, trær, traversering og rekursjon

INF Algoritmer og datastrukturer

Kompleksitet og Beregnbarhet

INF Algoritmer og datastrukturer

Løsnings forslag i java In115, Våren 1996

INF1010. Grensesnittet Comparable<T>

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

OPPGAVE 5b og 8b Java Kode

Løsningsforslag for Obligatorisk Oppgave 2. Algoritmer og Datastrukturer ITF20006

Trigonometric Substitution

Trær. En datastruktur (og abstrakt datatype ADT)

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Disjoint Sets. Chapter 21. CPTR 430 Algorithms Disjoint Sets 1

Hvor mye teoretisk kunnskap har du tilegnet deg på dette emnet? (1 = ingen, 5 = mye)

Eksempel 1 Eksempel 2 Dramatisering. INF1000 uke 3. Sundvollen 7. september 2015 Dag Langmyhr. INF1000 Sundvollen

Forelesning inf Java 5

Forelesning inf Java 5

Databases 1. Extended Relational Algebra

Del 3: Evaluere uttrykk

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Innledning. IN2010/INF Algoritmer og datastrukturer. Tirsdag 27. november 2018 Kl (4 timer)

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

KORTESTE STI. Vektede Grafer. Korteste Sti. Dijkstra s Algoritme. Vektet Urettet Graf

Norges Informasjonsteknologiske Høgskole

Øvingsforelesning 4. Topologisk sortering, Strongly Connected Components og Minimale spenntrær. Magnus Botnan

Løsningsforslag Test 2

IN Algoritmer og datastrukturer

TOD063 Datastrukturer og algoritmer

INF1010. Rekursjon En rekursiv definisjon av rekursjon, slik det kunne stå i en ordbok: Introduksjon til Rekursiv programmering

En algoritme for permutasjonsgenerering

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

UNIVERSITETET I OSLO

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

Sensorveiledning/løsningsforslag IN2010/INF2220 Algoritmer og datastrukturer H2018 Ragnhild Kobro Runde, Stein Michael Storleer, Ingrid Chieh Yu

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

INF2100. Oppgaver 26. september til 1. oktober 2007

Avdeling for ingeniørutdanning Institutt for teknologi

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

INF1010 Sortering. Marit Nybakken 1. mars 2004

INF Algoritmer og datastrukturer

Løsnings forslag i java In115, Våren 1998

Unit Relational Algebra 1 1. Relational Algebra 1. Unit 3.3

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

MAT1030 Diskret matematikk

TDT4100 Objektorientert programmering

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

UNIVERSITETET I OSLO

Forelesning inf Java 4

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

1 Hver node er enten rød eller sort. 2 Rota er sort. 3 En rød node kan bare ha sorte barn

STILLAS - STANDARD FORSLAG FRA SEF TIL NY STILLAS - STANDARD

UNIVERSITETET I OSLO

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

Kneser hypergraphs. May 21th, CERMICS, Optimisation et Systèmes

Endelig ikke-røyker for Kvinner! (Norwegian Edition)

Vi skal se på grafalgoritmer for:

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

IN1010 våren januar. Objektorientering i Java

INF5820 Natural Language Processing - NLP. H2009 Jan Tore Lønning

Algoritmer og datastrukturer Eksamen

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Oppgave 1. Oppgave 2. Høgskolen i Østfold Avdeling for informasjonsteknologi

UNIVERSITETET I OSLO

Forelesning 23. MAT1030 Diskret Matematikk. Repetisjon og mer motivasjon. Repetisjon og mer motivasjon. Forelesning 23: Grafteori.

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Gjennomgang av eksamen H99

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

Transkript:

Universitetet i Oslo Institutt for Informatikk S.M. Storleer, S. Kittilsen IN2010: Algoritmer og Datastrukturer Series 2 Tema: Grafteori 1 Publisert: 02. 09. 2019 Utvalgte løsningsforslag Oppgave 1 (Fra boka) R-13.5 Solution Inserting an edges runs in O(1) time since it is simply inserting an element for e = (i, j) into the appropriate two locations, A[i, j] and A[j, i]. To insert a vertex, on the other hand, we must construct a new version of the entire array, A. Clearly this will take O(n 2 ) time. R-13.6 a) b) Solution b: A DF S traversal starting at vertex 1 visits the vertices in the following order: 1, 2, 3, 4, 6, 5, 7, 8. R-13.7 Solution a: The adjacency list structure is preferable. Indeed, the adjacency matrix structure wastes a lot of space. It allocates entries for 100, 000, 000 edges while the graph has only 20, 000 edges. b: In general, both structures work well in this case. Regarding the space requirement, there is no clear winner. Note that the exact space usage of the two structures depends on the implementation details. The adjacency matrix structure is much better for operation areadjacent, while the adjacency list structure is much better for operations insertvertex and removevertex. c: The adjacency matrix structure is preferable. Indeed, it supports operation areadjacent in O(1) time, irrespectively of the number of vertices or edges. C-13.15 Kommentar Løsningsforslaget er basert på DF S algoritmen fra boka s. 367.

Solution Perform a DF S on G. G will have at least two cycles if and only if this DF S encounters at least two back edges. C-13.16 Solution Perform a DF S on G. G will have at least two cycles if and only if this DF S encounters at least two back edges. If there are more than two back edges, then G has more than two cycles. So, for the first back edge, mark all the edges in the cycle determined by this edge and the DF S tree as used. Then, for the second back edge, examine each of the edges in the cycle determined by this edge. If non of them is marked used, then these two cycles are disjoint. If one of them is used, then there are no two disjoint cycles. Oppgave 2 (Eulerkrets) I forelesningen definerte vi en Eulerkrets som en vei som starter og slutter i samme node og er innom alle kantene i G nøyaktig en gang. Vi så på problemet Eulerkrets: Eulerkrets Instans: En graf G Spørsmål: Har G en Eulerkrets? Lag en algoritme som løser Eulerkrets. Output skal være true/false. Kjører algoritmen i polynomiell tid? Begrunn svaret. Hint: Det finnes en egenskap som har med graden til nodene i G å gjøre, som nøyaktig bestemmer om G har en Eulerkrets eller ikke. Løsningsforslag Sjekk om G er sammenhengende. Hvis G inneholder minst to komponenter som inneholder kanter, kan det umulig finnes en Eulerkrets. Sjekk graden til alle nodene i G. Hvis graden til hver eneste node er et partall innholder G en Eulerkrets. Hvis én eller flere noder har odde grad inneholder G ikke en Eulerkrets. Algoritmen bruker polynomiell tid, siden å sjekke om G er sammenhengende kan gjøres med én traversering og fordi det å sjekke graden til hver node kun krever å gå gjennom nabo-lista til hver node. Oppgave 3 (Hamiltonsykel) Vi så også på problemet Hamiltonsykel. Hamiltonsykel Instans: En graf G Spørsmål: Har G en Hamiltonsykel? En Hamiltonsykel i en en graf G er en sykel som inneholder hver node nøyaktig en gang. Lag en algoritme som løser Hamiltonsykel. Output skal være true/false. Hint: Enn så lenge har ingen klart å finne en algoritme som løser dette problemet i polynomiell tid, så ikke ta det så tungt om også din algoritme bruker eksponensiell tid. Løsningsforslag Anta at G har n noder. Generer alle n! permutasjoner av nodene. For hver permutasjon: Sjekk at det går en kant mellom nodene som kommer etter hverandre i permutasjonen Sjekk at det er en kant mellom siste og første node. Oppgave 4 (Dybde-først-søk) I denne oppgaven skal du implementere dybde-først-søk (DFS). Implementer DFS og DFSFull basert på pseudo-koden fra forelesningen. Hvis du ønsker det kan du ta utgangspunkt i koden under. Eksempelgrafen i prekoden er grafen 2

fra slide 19 fra forelesningen. Den riktige traverseringsrekkefølgen etter DFS skal være: 0 1 2 3 4 5 6. Hvorfor gir DFS og DFSFull samme svar for denne grafen? Test koden din på større grafer som ikke er sammenhengende og forklar hvorfor DFS og DFSFull gir forskjellige svar. Løsningsforslag import java.util.list; import java.util.linkedlist; class Node { private int label; private boolean visited = false; private List<Node> neighbors = new LinkedList<Node>(); public Node(int label) { this.label = label; public int getlabel() { return label; public List<Node> getneighbors() { return neighbors; public boolean isvisited() { return visited; public void visit() { visited = true; public void addneighbor(node n) { if (!neighbors.contains(n)) { neighbors.add(n); n.addneighbor(this); public String tostring() { return Integer.toString(label); class Graph { private Node[] nodes; 3

public Graph(Node[] nodes) { this.nodes = nodes; public void printneighbors() { for (Node n1 : nodes) { String s = n1.tostring() + ": "; for (Node n2 : n1.getneighbors()) { s += n2.tostring() + " "; System.out.println(s.substring(0, s.length() - 1)); private static Graph buildexamplegraph() { Node[] nodes = new Node[7]; for (int i = 0; i < 7; i++) { nodes[i] = new Node(i); nodes[0].addneighbor(nodes[1]); nodes[0].addneighbor(nodes[2]); nodes[1].addneighbor(nodes[2]); nodes[2].addneighbor(nodes[3]); nodes[2].addneighbor(nodes[5]); nodes[3].addneighbor(nodes[4]); nodes[4].addneighbor(nodes[5]); nodes[5].addneighbor(nodes[6]); return new Graph(nodes); public void DFS(Node s) { System.out.println(s); s.visit(); for (Node n : s.getneighbors()) { if (n.isvisited() == false) { this.dfs(n); 4

public void DFSFull() { for (Node n : nodes) { if (n.isvisited() == false) { this.dfs(n); public static void main(string[] args) { Graph graph = buildexamplegraph(); graph.printneighbors(); graph.dfsfull(); 5