ID1020 Algoritmer och Datastrukturer

Relevanta dokument
Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

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

Rekursion och induktion för algoritmkonstruktion

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Föreläsning 13. Rekursion

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Föreläsning 2 Datastrukturer (DAT037)

Programmeringsteknik II

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Algoritmer. Två gränssnitt

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

Rekursion. Koffman & Wolfgang kapitel 5

FÖRELÄSNING 11 DATALOGI I

Programmering för språkteknologer II, HT2011. Rum

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Procedurer och villkor

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

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet

Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 1, vecka 7: Rekursion

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

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

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

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

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Classes och Interfaces, Objects och References, Initialization

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Tommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning...

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

OOP Objekt-orienterad programmering

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Tentamen, Algoritmer och datastrukturer

Tentamen i Algoritmer & Datastrukturer i Java

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Typkonvertering. Java versus C

Introduktionsmöte Innehåll

DELPROV 1 I DATAVETENSKAP

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 2 Datastrukturer (DAT037)

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Föreläsning 10. ADT:er och datastrukturer

Föreläsning 11: Rekursion

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Föreläsning 3: Booleans, if, switch

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Sökning och sortering

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Tentamen i Programmering

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.

Tentamen: Programutveckling ht 2015

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

PROGRAMMERING-JAVA TENTAMINA

Föreläsning 13 Datastrukturer (DAT037)

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

EDAA01 Programmeringsteknik - fördjupningskurs

Den som bara har en hammare tror att alla problem är spikar

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Rekursion och induktion för algoritmkonstruktion

DAT043 Objektorienterad Programmering

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

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

Sätt att skriva ut binärträd

ID1020: Union-Find. Dr. Jim Dowling kap Slides adapted from Algorithms 4 th Edition, Sedgewick.

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

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 3-4 Innehåll

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Chapter 4: Writing Classes/ Att skriva egna klasser.

Några svar till TDDC70/91 Datastrukturer och algoritmer

TENTAMEN OOP

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Föreläsning 5. Rekursion

Föreläsning 13 Datastrukturer (DAT037)

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen TEN1 HI

Programmeringsteknik I

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Föreläsning 1 & 2 INTRODUKTION

Transkript:

Slides adapted from Algorithms 4 th Edition, Sedgewick. ID1020 Algoritmer och Datastrukturer Dr. Jim Dowling (Examinator) jdowling@kth.se Dr. Johan Karlandar (Examinator) johank@nada.kth.se Dr. Per Brand (Swedish Institute of Computer Science) perbrand@sics.se

2 Kursens överblick Programmering och lösa problem med applikationer Algoritm: en metod för att lösa ett problem Datastruktur: en struktur där man lagrar information Utvärdera algoritmer: främst beräkningskomplexitet Område kapitel i boken Algoritmer och Datastrukturer datatyper 1 stack, queue, bag, union-find sortering 2 quicksort, mergesort, heapsort, prioritetkö sökning 3 BST, red-black BST, hashtabell grafer 4 BFS, DFS, Prim, Kruskal, Dijkstra

Varför läsa algoritmer och datastrukturer? Stor påverkan på omvärlden. - Internet. Web sökning, datornätverk, browsers,... - Datorer. Hårdvara, grafik, datorspel, lagring,... - Security. Cell phones, e-commerce, voting machines,... - Biologi. Helgenomsekvensering, proteinveck,.. - Sociala nätverk. Recommendationer, newsfeeds, reklam,... - Fysik. Large Halydron Collider Higgs Boson, N-body simulering, particle collision simulering,... 3

För att kunna bygga programvara Algoritmer + datastrukturer = progamvara - Niklaus Wirth, 1976 4

För att bli en bättre ukvecklare I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data structures and their relationships. Linus Torvalds (skapare av Linux) 5

6 Datadriven vetenskap Beräkningsmodeller håller på att ersätta anlaytiska modeller inom naturvetenskap procedure ACO_MetaHeuristic while(not_termination) generatesolutions() daemonactions() pheromoneupdate() end while end procedure 1900-talet (ekvationsbaserad) 2000-talet (algoritmsbaserad)

T.ex., nätverkskonnektivitet Lösa svåra problem..

8 För att det lönar sig! Varför läsa algoritmer?

Förkunskap En avklarad kurs i programmering (t.ex. ID1018) - loopar, arrayer, funktioner, objektorienterad programmering, stränger Erfarenhet med programmering i Java 9

Resurser Bilda - Alla uppgifter ska lämnas in på Bilda Inget grupparbete - Kursen examineras individuellt Hemsidan - www.it.kth.se/courses/id1020 10

Mer kurs info Krav - aktuell laborationskurs - tentamen Labbassistenter - Kamal Hakimzadeh - Mahmoud Ismail - Lars Kroll - Alex Ormenisan OBLIGATORISK TENTAANMÄLAN VIA DAISY 11

Kursboken SKAFFA OCH LÄS BOKEN! - Algorithms 4 th Edition, Sedgewick. Tips - Börja med labbarna och projekten i tid! - Gör kontrollfrågor på Bilda de är inte särskilt svåra 12

Examination Kontrollfrågor att svara innan föreläsningar (10%) - Ska svaras innan varje föreläsningen. Läs mer på Bilda. 5 laborationer (40%) - 12:e, 19:e September - 1:e, 10:e, 17:e Oktober Hemuppgift (4,5 HP) 2 programmeringsprojekt (50%) - 26:e September - 24:e Oktober Tentamen (3,0 HP) - 28:e Oktober 13

Programeringsmodeller och Data Abstraktion Rekursion (kap 1.1, sida 25 i boken) - En metod kan anroper sig själv! Läs kap. 1.1 och 1.2 från Algorithms 4 th Edition, Sedgewick och Wayne. 14

Grundläggande Java kunskap 15

Grundläggande Java kunskap

Arrayer

Aliasing int[] a = new int[n];... a[i] = 1234;... int[] b = a;... b[i] = 5678; // vad har a[i] för värde nu?

Statisk Metoder

Egenskaper av metoder Argument - pass-by-value (primitivtyper) - pass-by-reference (objekt) Metodnamn kan vara överlagrad (overloaded) - T.ex. Math.min(int x, int y), Math.min(double x, double y) Metoder har bara ett returvärde, men kan returnera från många olika ställen i en metod. En metod kan ha bi-effekter - T.ex., uppdatera attribut i objekt

Input och Output i Java Ett Java program kan tar input värden från: 1. kommando argument public void static main(string[] args) 2. miljövariabler java Djava.library.path=/home/jim/libs jar MyProgram.jar 3. standard-input stream (stdin) en abstrakt ström av karaktärer Ett Java program kan skriva output värden till: 1. standard-output stream (stdout) 21

Exekvera ett Java program

Formaterade Output

Omdirigering från stdinput

Omdirigering till stdout

Piping output från ett program till input av ett annat program

Data abstraktion Objekt orientierad design - Abstrakt data typer En Application Programming Interface (API) är en gränssnitt som specificierar beteendet av en abstract data type (ett kontrakt). En API inkapsulerar (encapsulates) beteendet av en abstrakt data typ. - Klienten vet inget om hur abstrakt data typen ser ut inuti.

28 Klass och Objekt Vilka operationer finns i API:n till Counter klassen?

29 Skapa objekt Counter Klasss API:n Anropa metod

Vad gör en API till en bra API? Inkapsulering Tydligt kontrakt Ger klienten vad den behöver, inte mer. Dåliga egenskaper av en API - Repetiton av metoder - För svårt att implementera - För svårt att använda för klienten - För smal (narrow) saknar metoder som klienter behöver - För bred (wide) inkluderar metoder som klienter inte behöver - För allmän (too general) inga nyttiga abstraktioner - För specificik abstraktionerna hjälper för få klienter - För kopplad till en representation klienter måste veta detaljer om en representation 30

API Design String Klass Behöver klienter metoden? int indexof(string p)

Rekursion

Ett enkelt rekursivt program public class Recursion { public static void main (String args[]) { next(0); } public static void next(int index) { StdOut.print(index); if (index < 2) { next(index+1); rekursion här (ett rekursivt anrop) } else { StdOut.println( klar ); basfall (base case) här } } } Programmet skriver ut: 012 klar

34 Visualisera rekursion med tid som en Stack next(2) next(1) next(1) next(1) next(0) next(0) next(0) next(0) next(0) main() main() main() main() main() main() main() Tid 0: Push: main() Tid 1: Push: next(0) Tid 2: Push: next(1) Tid 3: Push: next(2) Tid 4: Pop next(2) Tid 5: Pop next(1) Tid 6: Pop next(0) Base-Case: villkorlig blir false : else-statement exekveraras och next(2) returneras.

Rekursion Överväga följande serien: 1, 3, 6, 10, 15. Skriv ett program som beräknar nummret N i serien: 1. for-loop 2. while-loop 3. rekursion 35

Hitta n:te termen (for-loop stigande) int triangel(int n) { int summa= 0; for (int i=0; i<=n; i++) { summa = summa + i; } return summa; } 36

Hitta n:te termen (while-loop nedstigande) int triangel(int n) { int total = 0; while (n > 0){ total = total + n; --n; } return total; } 37

Nu, samma program med rekursion

Hitta n:te termen (rekursion) int triangel(int n) { if (n == 1){ return 1; } else { basfall return (n + triangel(n-1)); } } rekursion 39

Rekursion - motivation I datorvetenskap, visa problem är lättre att lösa med hjälp av rekursiva funktioner: - Traversera ett filsystem. - Traversera ett träd av sökresultat. 40

Fakultet En Fakultet defineras som: n! = n * (n-1) * (n-2). * 1; T.ex.: 1! = 1 (basfall) 2! = 2 * 1 = 2 3! = 3 * 2 * 1 = 6 4! = 4 * 3 * 2 * 1 = 24 5! = 5 * 4 * 3 * 2 * 1 = 120 Vi ska försöka lösa problemet i två delar: 1. Vad programmet kan lösa i en statement (ett basfall) 2. Vad man kan lösa med många likadana statements Sedan anropa en kopia av funktionen själv för att göra nästa steg 41

Fakultet Program public static int computefactorialwithloop(int n) { int factorial = n; for (int i = n - 1; i >= 1; i--) { factorial = factorial * i; } return factorial; } public static int findfactorialrecursion(int n) { if ( n == 1 n == 0) { return 1; } else { return (n * findfactorialrecursion(n-1)); } }

Fibonaccis talföljd Fibonaccis talföljd - Varje tal är summan av de två föregående Fibonaccitalen t.ex., 0, 1, 1, 2, 3, 5, 8, 13, 21 fibonacci(0) = 0 fibonacci(1) = 1 fibonacci(n) = fibonacci(n - 1) + fibonacci( n 2 ) fibonacci(0) och fibonacci(1) är basfallen 43

Rekursion och Loopar Rekursion - Byggar på villkorliga satser (if, if else or switch) - Repetition med hjälp av upprepade metodanropar - Terminerar när basfallet är nått/sant - Kontrollerar repetition genom att partitionerar ett problem i flera enklare problem Loopar - Byggar på for, while or do while - Repetition med hjälp av explicit representation av en repetitionskodblock - Terminerar när loop-villkorlig blir falsk eller break anropas. - Kontrollerar repetition med hjälp av en räknare 44

Rekursion vs. Loopar (fort.) Rekursion - Mer overhead än iteration undantag är med svansrekursion i vissa implementeringar - Kräver mer stackminne undantag är med svansrekursion i vissa implementeringar - Går att lösa med loopar - Kan oftast skrivas med ett få antal rader källkod 45

Svansrekursion (Tail recursion) En optimerad sorts rekursion då sista operationen i en funktion är ett rekursivt anrop. - Anropet är det sista som funktionen gör, så det kan ersättas med ett hopp, då ingen returadress behöver sparas på stacken. Detta kallas för svansanropsoptimering. stacken växer inte längre proportionellt mot antal rekursiv anrop int triangel(int n) { if (n == 1){ return 1; } else { return (n + triangel(n-1)); } // Inga mer operationer i funktionen } sista operation är ett rekursivt anrop Om man lägger till en/fler sats efter recursivt anropoet är det inte längre svansrekursion 46

47 Rekursion sammanfattning Rekursiv tanke: reducerar problemet till ett enklare problem med samma struktur Basfall: det måste finnas ett fall som inte leder till rekursivt anrop