Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.

Slides:



Advertisements
Lignende præsentationer
C# introduktion. using System; Namespace MyFirst { class eks1 { public static void Main() { Console.WriteLine("Hej!"); Console.Write("Skriv dit navn her:
Advertisements

T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Begreber og Redskaber 1 BRP.
Array og ArrayList Et slideshow. Som er sødt.. Hvordan virker ArrayList?  ArrayList NAVN = new ArrayList ();  NAVN.add(”Værdi”);  NAVN.add(index, ”værdi”)
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 Parsing. 2 Mål: Et program til indlæsning og beregning af aritmetiske udtryk Eksempel: Beregn (3*5 + 4/2) - 1 Løs et lettere problem først: Læs en streng.
Første generation (maskiner/operativsystemer) 45-55: radiorør Kun maskinsprog programmering = skrivning af nullerog ettaller Intet operativsystem programmør.
Grundlæggende programmering Efterår 2001
GP10, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 10 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.
Hvordan man skriver koden.
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Begreber og Redskaber 7. Plan for idag Sorteringsalgoritmer Logaritmer,tabeller,køretid Simpelt iterativt: udvalgssortering Rekursivt: Flette sortering.
Begreber og Redskaber 9. Plan for idag I dag: Datastrukturer Tabeller Lister, mængder, maps, grafer Hægtede lister.
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.
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
Forelæsning 3.1 Collections Javas for-each løkke
FEN Sprog1 Lidt om sprog Definition: Et sprog over et endeligt alfabet  (sigma) er en mængde af strenge dannet af tegn fra . Eksempel: Lad.
Begreber og Redskaber 1. Emner i kurset Om sprog og sprogbeskrivelse Repræsentation af tal i maskinen –Heltal, negative tal, kommatal, logiske værdier.
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
Per P. Madsen- Proces1 Algoritmer og datastrukturer Grundprincipper og analyse af algoritmer. MM1 Lister, stakke og køer. MM2 Træer, og Hash-tabeller.
Grafalgoritmer II.
GP 6, 13/ Grundlæggende programmering Forår 2002 Forelæsning 6 onsdag 13/ kl. 9:15 – 12:00.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
Validering af bruger-input i.NET WebForms Valideringsmuligheder i ASP.NET Fordele og ulemper Server-side vs. client-side Formatering vs. Validering.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
Begreber og Redskaber 1. Programmeringssprog Sprog = mængde af sætninger ?
Begreber og Redskaber 1 BRP.
11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Paradigmer i Programmering 1. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:
Forelæsning 2.2 Tilstand og opførsel (repetition)
Fundamentale sprogbegreber
FEN IntroJava AAU1 Endnu mere om Klasser og Objekter Mange til mange relationer Student-Course v3.
Begreber og Redskaber 1. Plan for kurset Formål –Give et begrebsmæssigt grundlag for programudvikling, samt overblik over udvalg af redskaber og metoder.
JavaCC Top-down (Recursive descent). Mest populære mht Java. Regulær grammatik og Context-free grammatik i en fil. Tillader EBNF: (..)*, (..)+ og (..)?
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Forelæsning 7.1 – repetition
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn)
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering9B.1 Fletning.
Rekursive skildpadder Supertrekanter.....  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.2 Penta, etc.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.1 Søgning.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Interfaces – hvorfor, hvad og hvordan?.  Michael E. Caspersen 2003IOOPInterfaces.2 Oversigt Interfaces, hvorfor –Separering af specifikation (interface)
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering6B.1 Rekursive skildpadder Supertrekanter....
DAIMIIntroducerende objektorienteret programmeringfletning.1 Fletning.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning.
Ændr 2. linje i overskriften til AU Passata Light AARHUS UNIVERSITET AU ARBITRARY PRECISION MICHAEL I. SCHWARTZBACH KRISTOFFER JUST ANDERSEN INSTITUT FOR.
Quiz – Uge 3 – torsdag – første time
Studiepraktik Thomas Bøgholm Mikkel Hansen Jacob Elefsen
Quiz – Uge 3 – torsdag – første time
Præsentationens transcript:

Begreber og Redskaber 7

Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering

Fra første forelæsning Grammatikken for regneudtryk i MiniJava Expression : VarName | Number | ””” { Tegn } ””” | Expression ”+” Expression | Expression ”-” Expression | ”(” Expression ”)”

Rekursion Et udtryk består af deludtryk I et filsystem kan kataloger indeholde filer og kataloger Andre ting kan opfattes rekursivt: En streng er enten tom eller et tegn foran en streng

Trekanter public class Brp6{ public static void trekant(int i){ if(i>0){ trekant(i-1); while(i>0){ System.out.print("*");i--;} System.out.println(); } } public static void main(String args[]){ trekant(3); System.out.println(); trekant(5); System.out.println(); } * ** *** * ** *** **** *****

Potensopløftning static int power(int x, int n){ int r = 1; while(n>0){ r = r*x; n=n-1; } return r; } static int rpower(int x, int n){ if(n==0) return 1; else return x*rpower(x,n-1); }

Iteration vs. rekursion Iteration - gentag et antal gange Rekursion: –for 0 returner 1 –for 1 returner x –for 2 returner x*x –for 3 returner x*x*x –for 4 returner x * det-der-skulle-returneres-for-3 –for 5 returner x * det-der-skulle-returneres-for-4

Fordele - ulemper Rekursive løsninger er ofte korte og elegante. Har man forstået det er det en enkel måde at udtrykke sig på Har man ikke forstået det, så er det besværligt Visse ting er vanskellige at gøre iterativt

Fjern blanktegn fra streng static String fjernblanke(String s){ String rs=""; for(int i=0;i<s.length();i++){ String s1=s.substring(i,1); if(!s1.equals(" "))rs=rs+s1; } return rs; }

Fjern blanktegn static String fjernblanke(String s){ if(s.equals("")) return ""; else if(s.charAt(0)==' ') return fjernblanke(s.substring(1)); else return s.substring(0,1)+ fjernblanke(s.substring(1)); }

Rekursiv tilgang Se på de nemme tilfælde. Se på om de besværligere tilfælde ikke kan løses ud fra løsning af nemmere tilfælde.

Besværligt iterativt Gennemløb et filsystem og led efter filer med særlige egenskaber (feks..bak) Hvis iterativt skal man samle en liste med kataloger der skal undersøges rekursivt: kig efter filerne og for alle underkataloger kald søgningen rekursivt

Rekursive datastrukturer class Liste{ int i Liste naeste; Liste(int ii,Liste nn){i=ii;naeste=n;} } Liste list=new Liste(1,new Liste(2,null));

Fletning Flettesortering De to lister [5, 9, 10] og [1, 8, 11] er begge sorterede En samlet og sorteret liste [1, 5, 8, 9, 10, 11] ønskes. En sådan kan fås vha. sammenfletning

Fletning De to lister flettes sammen på følgende vis [] <- [5, 9, 10] [1, 8, 11] [1] <- [5, 9, 10] [8, 11] [1, 5] <- [9, 10] [8, 11] [1, 5, 8] <- [9, 10] [11] [1, 5, 8, 9] <- [10] [11] [1, 5, 8, 9, 10] <- [] [11] [1, 5, 8, 9, 10, 11] <- [] []

Flettesortering Flettesortering af en liste heltal Der er to tilfælde 1. Listen har eet element -- Der skal da ikke gøres noget 2. Listen har mere end eet element -- Listen deles op i to mindre lister -- Hver af de to mindre lister flettesorteres -- De to resulterende lister flettes sammen Bemærk: Basis og rekursivt tilfælde

Fletning from mid mid+1 to Sorteret

Fletning static void merge(int[] tb,int[] tm, int from,int mid,int to){ int n = to-from+1; int i1=from, i2=mid+1, j=0; while(i1<=mid && i2 <= to){ if(tb[i1]<tb[i2]){ tm[j]=tb[i1];i1++;j++; }else{ tm[j]=tb[i2];i2++;j++; } while(i1<=mid){tm[j]=tb[i1]; i1++;j++;} while(i2<=to ){tm[j]=tb[i2]; i2++;j++;} for(j=0;j<n;j++)tb[from+j]=tm[j]; }

Flettesortering static void mergesort(int[] tb,int[] tm, int from,int to){ if(from==to) return; int mid=(to+from)/2; mergesort(tb,tm,from,mid); mergesort(tb,tm,mid+1,to); merge(tb,tm,from,mid,to); } static void sort(int[] tb){ int tm[]=new int[tb.length]; mergesort(tb,tm,0,tb.length-1); }

Figure 2 Merge Sort Timing (Rectangles) versus Selection Sort (Circles)

Logaritmer Det omvendte af potenser 10 5 = =1 log 10 (100000)=5log 10 (1)=0 2 8 = =1 log 2 (256)=8log 2 (1)=0 Regne med potenser og logaritmer a n+m =a n * a m log(n * m)=log(n)+log(m)

Køretid – groft overslag Ide: halver tabel – sorter hver del og flet. Fletning er i lineær tid (dvs n), men hvor mange gange kan man halvere en tabel? Lad n være tabellens længde. Køretid i størrelsesordenen n * log 2 (n)

Køretid For merge(.. from,mid,to) gennemløbes elementerne fra ”from” til ”to” 2 gange Køretid af mergesort: T(n) = T(n/2)+T(n/2)+2 * n = 2 * (T(n/2)+n) udfold: T(n)=2*(2*(T(n/4)+n/2)+n) T(n)=2*(2*(2*(T(n/8)+n/4)+n/2)+n)

Køretid T(n)=2*(2*(T(n/4)+n/2)+n) =4*T(n/4)+4*n T(n)=2*(4*T(n/8)+4*n/2)+n)=8*T(n/8)+6*n T(n)=2*(8*T(n/16)+6*n/2)+n)=16*T(n/16)+8*n T(n)=2 k +2*k*n, hvor k er antal gange man kan halvere – altså log 2 (n) O(log 2 (n) * n)

Eksempel Antal sammenligninger (<): Tabel med 1000 udvalgssortering: Flettesortering:8706 Tabel med udvalgssortering: Flettesortering:120472

Konklusion Det at funktionen n·log(n) vokser mindre end funktionen n 2 forklarer hvorfor det er mere effektivt at flettesortere end at udvalgssortere.