För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Lite mer rekursivitet -Sorterrings algoritmer -- Kapitel 8 Algoritmer.

Slides:



Advertisements
Liknande presentationer
Avlusning Debugger (”avlusare”) Breakpoints Watch.
Advertisements

Funktioner och programorganisation
2D1311 Programmeringsteknik med PBL
Prolog, Mån 16/9 Rebecca Jonson.
Algoritmer och data strukturer -Länkade listor
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
För utveckling av verksamhet, produkter och livskvalitet. Rekursiva algoritmer, en annan sort tänkande -Hur -När -Bra/Dåligt (kap 7)
Algoritmer och datastrukturer
Programmeringsteknik K och Media
Programmeringsteknik för K och Media
Algoritm analys och rekursiva metoder kap 5,7
i olika programmeringsspråk
1 ITK:P1 Föreläsning 5 Iteration, slumpning och arrayer DSV Peter Mozelius.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Variabler: Datatyp - grundläggande : int, double, char, boolean eller
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Repetition inför slutprovet
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Programmering B PHP Lektion 3
int res2=Math.max(tal1,tal2);
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 1 De bifogade OH-bilderna är bara utkast till vad som kan vara.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Rekursiva algoritmer Hur När Bra/Dåligt (kap 7).
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- -Algoritm analys och sökning algoritmer- Kap 5 -Algoritmer och.
Namnrum, räckvidd och rekursion Linda Mannila
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 C# I/O Streams C# använder “strömmar” för in- och utmatningsoperationer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
TILLÄMPAD DATALOGI (TILDA) Övning 3
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
PROGRAMMERINGSTEKNIK Övningsgrupp 3 Marcus Hjelm
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Rekursion. En metoddefinition som innehåller ett anrop av sig själv kallas rekursiv.
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
Träd -Allmänt om träd -Binärt träd -Filkomprimering med Huffman träd
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd,
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sorterings algoritmer.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
TILLÄMPAD DATALOGI (TILDA) Övning 2
TILLÄMPAD DATALOGI (TILDA) Övning 2
William Sandqvist PWM Sinusoidal Hur tillverkar man en sinusformad spänning? En PWM-signal kan ge en sinusapproximation. Efter filtrering.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Algoritmer och loopar Algoritmer, beräkningsbarhet
Anders Sjögren Funktioner något in och något annat ut.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd.
Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap
Föreläsning 11: Rekursion
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Algoritmer och datastrukturer,förel. 10
Repetitionsföreläsning 1: Lite rekursion & problemlösning
Presentationens avskrift:

För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Lite mer rekursivitet -Sorterrings algoritmer -- Kapitel 8 Algoritmer och datastructurer - Lite mer rekursivitet -Sorterrings algoritmer -- Kapitel 8

För utveckling av verksamhet, produkter och livskvalitet. Rekursion ?  En rekursiv metod är en metod som anropar sig själv.  Liknar loopar / iterationer  Mycket kraftfull men något förvirrande...  Rekursion är ett sätt att lösa ett problem genom att dela problemmet i flera identiska men mindre subproblem, dvs. metoden anropar sig själv med ” ett mindre argument”. Summan av n

För utveckling av verksamhet, produkter och livskvalitet. Exempel public static int sumOf(int n) { if(n==1) return 1; else return sumOf(n-1) +n; } !! basfall Se till att den rekursiva anropet alltid leder till basfallet

För utveckling av verksamhet, produkter och livskvalitet. En enkel lösning till ett komplicerat problem, ”the towers of Hanoi” En grupp munkar på 1800 talet fic uppd att flytta 64 skivor guld (med olik diameter) från ett torn till ett annat. När arbetet var klart skulle jorden gå under. Följnde regler skulle följas: 1)Flytta en disk i taget 2)Ingen skiva med större diameter får ligga över en med mindre. 3)En temporärt torn kan användas så länge regel 1och 2 följs. Hur lång tid tar det att slutföra arbetet om det tar 1 min för varje flytt?

För utveckling av verksamhet, produkter och livskvalitet. Towers of Hanoi, lösning

För utveckling av verksamhet, produkter och livskvalitet....och algoritmen...? void hanoi(int n, char from, char to, char h){ if(n>0){ hanoi(n-1,from,h, to); System.out.println(from+" --> "+to); hanoi(n-1,h,to,from); }

För utveckling av verksamhet, produkter och livskvalitet. En dålig lösning till ett enkelt problem På talet hittar Leonardo Fibonacci en sekvens av tal för att modellera antalet avkommer från ett kanin par F0=1 F1=1 F2=2 F3=3 F4=5 Fn=Fn-1+Fn-2

För utveckling av verksamhet, produkter och livskvalitet. Rekursiv algoritm för fibonacci int fibonacci(n) { if(n==0)|| (n==1) return 1 else return fibonacci(n-1)+fibonacci(n-2) }

För utveckling av verksamhet, produkter och livskvalitet. Dinamisk programmering public static int fibonacci (int n) { if(n<=1) return 1; else { int first=1; int next=1;int fibTal=0; for (int i=1;i<n;i++) { fibTal=first+next; first=next; next=fibTal; } return fibTal; } Princip: Beräkna ny värde genom att använda de senaste beräknade värde

För utveckling av verksamhet, produkter och livskvalitet. Varför är sortering viktigt? Rekursiv binär sökning public static int binarySearch(Comparable [ ] a, Comparable x) { return binarySearch(a,x,0,a.length-1) ; } private static int binarySearch(Comparable [ ] a, Comparable x, int low, int hight){ if(low>hight) return -1; int mid=low+hight/2 else { if(a[mid].compareTo(x)<0) return binarySearch(a,x,mid+1,hight); // h ä r anropar metod sig sj ä lv med h ö gra halvan else if(a[mid].compareTo(x)>0 return binarySearch(a,x,low,mid-1); // h ä r anropar metod sig sj ä lv med v ä nstra halvan else return mid; }

För utveckling av verksamhet, produkter och livskvalitet. Varför är sortering viktigt ? En annan exempel. public static boolean duplicates( int [] a) { for(int i=0;i<a.lenght;i++) for(int j=i+1;j<a.length; j++) if(a[i]==a[j]); return true ; return false; } Om en samling data är sorterad, effektiviteten av alla algoritmer på respektive datan ökar betydligt.

För utveckling av verksamhet, produkter och livskvalitet. Kvadratiska O(n^2) sorteringar public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; } Ex.tiden O( ) Om arrayen är redan sorterad? Ex.tiden O( )

För utveckling av verksamhet, produkter och livskvalitet. insertionSort public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet. temp= public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet. temp= public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet. temp= public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet. temp= public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet. temp= public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet. temp= public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet. temp= public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet. temp= public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet. temp= public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet. temp= public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet. temp= public static void insertionSort(int [] a) { for(int p=1;p<a.length;p++){ int temp=a[p]; int j=p; for (; j>0 && temp<a[j-1] ; j--){ a[j]=a[j-1]; } a[j]=temp; }

För utveckling av verksamhet, produkter och livskvalitet. temp=

För utveckling av verksamhet, produkter och livskvalitet. insertionSort()- speciellt fall Vad blir exekveringstiden när arrayen är sorterad? Tidskomplexitet (värstafall): …. + n-1 = n(n-1)/2 = O(n2)

För utveckling av verksamhet, produkter och livskvalitet. Subkvadratiska sorteringsalgoritmer använder divade & conquer - strategi Merge Sort O( NlogN) Dela arrayen i två halvor, sortera halvorna och sedan sätter ihopp halvorna ( merge) i en sorterad array Quick Sort O(NlogN) Dela arrayen i två delar genom att välja ett element i arrayen som pivot. Element som är mindre en pivoten fyttas till enda delen, element som är större till den andra.Sortera delarna.

För utveckling av verksamhet, produkter och livskvalitet. Divade & Conquer – teknik (söndra och härska )  Att dela ett problem i två mindre subproblem som kan lösas rekursivt  Att sätta ihop lösningen till subproblemen för att lösa original problemet.

För utveckling av verksamhet, produkter och livskvalitet. MergeSort -algoritmen

För utveckling av verksamhet, produkter och livskvalitet. MergeSort

För utveckling av verksamhet, produkter och livskvalitet. MergeSort

För utveckling av verksamhet, produkter och livskvalitet. MergeSort

För utveckling av verksamhet, produkter och livskvalitet. MergeSort

För utveckling av verksamhet, produkter och livskvalitet. MergeSort-algoritmen

För utveckling av verksamhet, produkter och livskvalitet. Java implementation av Merge Sort public static void mergeSort( int [] a) { int [] temp= new int[a.length]; mergeSort(a, temp, 0, a.length-1); } private static void mergeSort( int [] a, int[] temp,int first,int last) { if(first<last){ int center=first+last/2; mergeSort(a,temp,first,center); mergeSort(a,temp,center+1,last) merge(a,temp,first,center+1,last); } Se merge () i kurslitteraturen

För utveckling av verksamhet, produkter och livskvalitet. Tidskomplexiteten? Dela i två halvor Sortera halvorna Gör ”merge” till en temp array Kopiera temp arrayen tillbaka till original arrayen

För utveckling av verksamhet, produkter och livskvalitet. Quicksort Söndra och härska algoritm med flera variationer Bättre i medelfall än övriga algoritmer Dålig i värsta fall, som dock händer nästan aldrig Idé: Välj ut ett element (pivot) och se till att det hamnar på rätt plats genom att först flytta om övriga element så att alla som är mindre än pivotelementet hamnar till vänster och alla större hamnar till höger. Upprepa sedan (rekursivt) på vänster och höger delar av arrayen

För utveckling av verksamhet, produkter och livskvalitet. QuickSort- implementationsskiss <=pivotpivot>=pivot quickSort( a,first, last) { if(first<last) // välj pivot // dela arrayen quickSort(a,first,pivotindex-1) // sortera mindre quickSort(a,pivotindex+1,last) // sortera större }

För utveckling av verksamhet, produkter och livskvalitet. Quicksort med pivot = median av tre Antag vi skall sortera array elementen mellan a[low]..a[high]. Mittplatsen mid = (low + high) / 2. Utred storleksordningen mellan elementen a[low], a[high] och a[mid]. Byt samtidigt platser så att platsen low kommer att innehålla det minsta av dem, mid det mittersta i storleksordning och high det största. low mid high low mid high Pivotelementet = medianen av de tre = elementet som nu

För utveckling av verksamhet, produkter och livskvalitet. QuickSort() Median av tre ->6

För utveckling av verksamhet, produkter och livskvalitet. QuickSort()

För utveckling av verksamhet, produkter och livskvalitet. QuickSort()

För utveckling av verksamhet, produkter och livskvalitet. QuickSort()

För utveckling av verksamhet, produkter och livskvalitet. QuickSort()