Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap

Slides:



Advertisements
Liknande presentationer
Talföljder formler och summor
Advertisements

void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
1 Listor En sekvens värden av samma typ Nr 5. 2 Listor Sekvens av värden, element Variabelt antal Alla med samma typ Bara första elementet direkt åtkomligt.
2D1311 Programmeringsteknik med PBL
Sökning och sortering Linda Mannila
DAB752: Algoritmteori Leif Grönqvist
För utveckling av verksamhet, produkter och livskvalitet. Rekursiva algoritmer, en annan sort tänkande -Hur -När -Bra/Dåligt (kap 7)
Logikprogrammering Ons, 25/9
Föreläsning 7 Analys av algoritmer T(n) och ordo
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Lite mer rekursivitet -Sorterrings algoritmer -- Kapitel 8 Algoritmer.
Algoritmer och datastrukturer
Föreläsning 6 Länkade lista Komplexitet Linjärsökning & binärsökning
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 5 Python: argument från kommando-tolken
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 6 Asymtotisk analys.
Algoritm analys och rekursiva metoder kap 5,7
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
1 ITK:P1 Föreläsning 5 Iteration, slumpning och arrayer DSV Peter Mozelius.
Vektorer (klassen Vector) Sortering
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Generiska algoritmer Kan användas på containertyper och arrays Använder iteratorer Implementerar.
Funktioner, styrstrukturer, manipulering av matriser
1 Föreläsning 3 programmeringsteknik och Matlab 2D1312/ 2D1305 Matlab fortsättning Funkioner, styrstrukturer, manipulering av matriser.
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
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).
DD1311 P ROGRAMMERINGSTEKNIK MED PBL Föreläsning 9 Skolan för Datavetenskap och kommunikation.
För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- -Algoritm analys och sökning algoritmer- Kap 5 -Algoritmer och.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 6: Process- synkronisering.
Namnrum, räckvidd och rekursion Linda Mannila
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Prioritets Köer (Priority Queues ), Graph Data Structures & Problem Solving using Java --Kap 21,14.
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Datastrukturer och algoritmer
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 13.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
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.
Föreläsning 9 Logik med tillämpningar Innehåll u Semantiska tablåer i predikatlogiken u Klausulform u Herbrandmodeller u Kapitel 3.5,
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sorterings algoritmer.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 9 Grafalgoritmer.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
1 Matlab, föreläsning 1 Oktober MATLAB Perspektiv på materialdesign Lina Kjellqvist Rum: K324 Telefon:
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
Datastrukturer och algoritmer
1 Föreläsning 13 programmeringsteknik och Matlab Funktioner, styrstrukturer, mer om matriser.
Algoritmer och loopar Algoritmer, beräkningsbarhet
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd.
KPP053, HT2015 MATLAB, Föreläsning 4
Databaser, avancerade frågor
Left hand side is the P (Plan) Right hand side is DSA (Do Study Act)
Föreläsning 3: Booleans, if, switch
Föreläsning 11: Rekursion
Föreläsning 8: Exempel och problemlösning
Iteration – Repetitionssats - while
Algoritmer och datastrukturer,förel. 10
Presentationens avskrift:

Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap Asymptotisk komplexitet Ordobegreppet

Tidskomplexitet Algoritmers körtid mäts i antal operationer: additioner tilldelningar jämförelser … inte i sekunder! Varför? För en given indatastorlek (t.ex. antal element i en lista), hur många operationer utförs? T(n) = f(n)

Exempel: SeqSearch • Om listan har n element behövs (i värsta fall) procedure SeqSearch (List, Value) while ( entries left to be considered) do TestEntry ← next entry from List if ( Value = TestEntry ) then return “success” return “search failed” •  Om listan har n element behövs (i värsta fall) n uppslag n tilldelningar n jämförelser Kan det göras snabbare? T(n) = 3n + 1 operationer! 1 returnering Algoritmer & Datastrukturer, TDA143, VT17, UH

Binärsökning • Om listan är sorterad 1 2 3 4 6 7 9 6 > 4 6 < 7 6 = 6 procedure BinSearch (List, Value) if( List isEmpty ) return “fail” else TestEntry ← middle entry of List if( Value = TestEntry ) return “success” if( Value > TestEntry ) return BinSearch(RightHalfofList, Value) if( Value < TestEntry ) return BinSearch(LeftHalfofList, Value)

Binärsökning (forts.) Antalet halveringar av n saker = log2n Binärsökning kräver bara 5 log2n + 2 operationer i värsta fallet

Asymptotisk komplexitet - Ordo (Big-O) Vanligen räknar man inte exakta antal. Istället beräknar man den asymptotiska komplexiteten - hur antalet operationer växer med storleken på indata! Exempel: Om vi dubblar antalet element, hur mycket längre tid tar det att sortera dem?

g är uppåt begränsad av f Ordobegreppet: Big-O En funktion g(n) är O(f(n)) om det finns en konstant c>0 så att g(n) ≤ c f(n) för alla n ≥ n0 ≥ 0 g är uppåt begränsad av f f(n) g(n) n0

Insättningssortering procedure InsertionSort( List ) N ← 2 while ( N ≤ LengthOfList ) do Select the N:th entry in the List as the pivot Move pivot to a temporary location leaving a hole while( (exists entry left of the hole ) and (entry > pivot) do Move the entry down into the hole Move the pivot into the remaining hole N ← N + 1

Sortering: Tidskomplexitet •  Insättningssortering, grov analys -  Två nästlade for-loopar med som mest n iterationer vardera => T(n) = O(n2) operationer •  Merge sort: T(n) = O(n log n) -  Hur många operationer behövs för att sortera 2n element jämfört med n element med respektive algoritm? - T(2n) = ...

Tidskomplexitet för sekventiell beräkning Tidskomplexiteten hos en sekventiell beräkning är samma som komplexiteten för sekvensens dominerande komponent. S1; S2; Om tidskomplexiteten för S1 är O(f1(M)) och för S2 O(f2(N)) så har sekvensen S1;S2 komplexiteten O(max(f1(M),f2(N))). Ofta är M och N samma variabel, som i exemplet nedan. Ex. Komplexiteten för hela sekvensen nedan är O(N∙log(N)). Inläsning av N element till ett fält; O(N) Sortering av fältet med Quicksort; O(N∙log(N))

Tidskomplexitet för iteration Tidskomplexiteten hos en iteration är produkten av antalet iterationer och maximum av komplexiteten för beräkningen av loopvillkoret och för arbetet som utförs i varje iteration. while ( cond ) S; Om loopen itererar O(fit(N1)) varv och tidskomplexiteten för att beräkna loopvillkoret cond är O(fcond(N2)), och för satsen S, O(fbody(N3)), så har hela loopen komplexiteten O(fit(N1)∙max(fcond(N2),fbody(N3)))

for ( int j = 0; j <= N; j++ ) sum = sum + j; Ex. for ( int j = 0; j <= N; j++ ) sum = sum + j; Här är fit(N) = N, fcond = c1 och fbody = c2 Tidsåtgången för beräkningen av loopvillkoret och satsen beror ej av N utan kan antas ta konstant tid varje gång de utförs (c1 och c2). Hela loopen får därför komplexiteten O(N∙max(c1,c2)) = O(N). for ( int i = 0; i <= M; i++ ) for ( int j = 0; j <= N; j++ ) sum = sum + j; Här är fit(M) = M, fcond = c1 och fbody(N) = O(N) (enligt ovan). Hela loopen får komplexiteten O(M∙max(c1,N)) = O(M∙N). O(M∙N) O(N)

Regler för produkt och summa Sats Låt Då gäller att

Bevis Från (1) och (2) och definitionen av ordo följer att Låt då följer direkt av olikheterna ovan att d.v.s. alltså är

forts. men så av (3) och (4) följer att d.v.s. alltså är v.s.v.

Exempel: Analys av loopar Bestäm tidskomplexiteten T(n) för looparna på bilderna som följer! Försök hitta så snäva övre begränsande funktioner f(n) som möjligt, så att T(n) = O(f(n)).

for ( int i = 0; i < n; i++ ) sum++; // Fragment #1 for ( int i = 0; i < n; i++ ) sum++;

for ( int i = 0; i < n; i += 2 ) sum++; // Fragment #2 for ( int i = 0; i < n; i += 2 ) sum++;

for ( int i = 0; i < n; i++ ) for ( int j = 0; j < n; j++ ) // Fragment #3 for ( int i = 0; i < n; i++ ) for ( int j = 0; j < n; j++ ) sum++;

for ( int i = 0; i < n; i++ ) sum++; // Fragment #4 for ( int i = 0; i < n; i++ ) sum++; for ( int j = 0; j < n; j++)

for ( int i = 0; i < n; i++ ) for ( int j = 0; j < n * n; j++ ) // Fragment #5 for ( int i = 0; i < n; i++ ) for ( int j = 0; j < n * n; j++ ) sum++;

for ( int i = 0; i < n; i++ ) for ( int j = 0; j < i; j++ ) // Fragment #6 for ( int i = 0; i < n; i++ ) for ( int j = 0; j < i; j++ ) sum++;

for ( int i = 0; i < n; i++ ) for ( int j = 0; j < n * n; j++ ) // Fragment #7 for ( int i = 0; i < n; i++ ) for ( int j = 0; j < n * n; j++ ) for ( int k = 0; k < j; k++ ) sum++;

for ( int i = 1; i < n; i = i*2 ) sum++; // Fragment #8 for ( int i = 1; i < n; i = i*2 ) sum++;

for ( int i = 0; i < n; i++ ) sum++; // Fragment #9 for ( int i = 0; i < n; i++ ) sum++; for ( int j = 0; j < n * n; j++ )

for ( int j = 1; j < i * i; j++ ) if ( j % i == 0 ) for ( int i = 1; i <= n; i++ ) for ( int j = 1; j < i * i; j++ ) if ( j % i == 0 ) for ( int k = 0; k < j; k++ ) sum++;