220 likes | 496 Views
Föreläsning 4 Algoritmer. Vad är algoritm?. En algoritm är en begränsad uppsättning väldefinierade instruktioner för att lösa en uppgift Kännetecken: Indata, lista I Utdata, lista U Det brukar finns flera sätt att lösa ett problem flera algoritmer effektivitet? Effektivitet:
E N D
Föreläsning 4Algoritmer 729G04
Vad är algoritm? • En algoritm är en begränsad uppsättning väldefinierade instruktioner för att lösa en uppgift Kännetecken: • Indata, lista I • Utdata, lista U Det brukar finns flera sätt att lösa ett problem flera algoritmer effektivitet? Effektivitet: • Eller som löser problemet på kortast tid. • Eller som löser problemet med minst resurser. • eller som är minst komplicerad. 729G04
Flödesdiagram Symboler: • Start och slut (ovaler) • Flödesriktning (pilar) • Instruktioner (rektangel) • Villkor (romber) • Indata,utdata (parallellogram) (se bilden) I dagsläget: pseudokod istället 729G04
Avbuggning • För att hitta fel i programmet eller få insikt i programmet skrivet av ngn annan: • Använd något indata • Kör algoritmen steg-för-steg • Dokumentera flödesriktning och värden på viktiga parametrar • Jämför med förväntad utdata Exempel: Avbugga detta power(2,4) (hitta fel!) • Function power(x,p) • x0=x • For i=1 to p • x0=x0*x • End • Return x0 729G04
Vanliga algoritmer • Sökning • Linjär sökning • Binär sökning • Sortering • Bubblelsortering (bubble sort) • Urvalssortering (selection sort) • Insättningssortering (insertion sort) • Mergesort • Quicksort • Heap sort • Binärträdssökning 729G04
Komplexitet • Varför olika algoritmer • Ibland historiskt, algoritmer blir snabbare • Passar bäst för olika typer av data (kompromiss minne -snabbhet) Komplexitet: • Sämsta fall (Worstcase) • Normalfall (Averagecase) • Undre gräns(Lowerbound) 729G04
Komplexitet Bestäms med hjälp av indatastorlek n. DefAlgoritmen har komplexiteten O(g(n)) om antalet elementära (numeriska) operationer T : |T|≤C|g(n)| Typiska g(n)=np, log(n) , 2n Exempel: Komplexiteten på power(x,p)-? 729G04
Linjär sökning • Söker efter en nyckel i en sekvens, ett element i taget • Indata: nyckel x och sekvens X • Utdata: nyckelns position i sekvensen • Ide: jämför x med Xi, i=1,2,…n 729G04
Linjär sökning - pseudokod • Functionlinear_search(x, X): • pos = 1 • while pos <= len (X) and X[pos] != x • pos = pos + 1 • end • ifpos<= len(X) • returnpos • else • return -1 729G04
Linjär sökning Övning: • Rita flödesdiagram • Avbugga för • x=3, X=(1,3,4) • x=5, X=(1,3,4) • Komplexiteten • Sämsta fall O(n) • Normalfall O(n) • Undre gräns O(1) 729G04
Binär sökning • Söker efter en nyckel i en ordnad sekvens • Sekvensen man söker i halveras varje gång • Indata : nyckel och sorterad sekvens • Utdata: nyckelns position i sekvensen 729G04
Binär sökning Övning: • Avbugga Sekvens= (1 4 6 9 13 17 21 29 47) Nyckel=21 • Komplexitet: • Sämsta O(log(n)) • Undre gräns O(1) 729G04
Bubbelsort • Gör parvisa jämförelser och byter plats på element som är i fel ordning • Indata: Osorterad sekvens • Utdata: Sorterad sekvens • Iden: Mindre element flyttar till början av listan (jämf: bubblar i vattnet) 729G04
Bubbelsort Functionbubble_sort(A): n = length(A) for j =1 to n for i =1 to n-1 if A[i]>A[i+1] swap(A,i,i+1) end end return A functionswap(seq, i, j): element = seq[i] seq[i] = seq[j] seq[j] = element 729G04
Bubbelsort • Exempel: Bank A i Indien planerar avskeda 20 % anställda i försäkringsavdelningen. Kriteriet: antalet antaletsålda försäkringar per år. • föreslå strategin • Använd bubbel sort för datamängden: 729G04
Bubbelsort • Komplexitet • Sämsta fall O(n2) • Normalfall O(n2) • Undre gräns O(n) • Sämre än alla andra sorteringsalgoritmer. 729G04
Insättningssort • Indata: Osorterad sekvens • Utdata: Sorterad sekvens • Iden: Få sorterad sekvens av längd i igenom att sätta in element i i den sorterade sekvensen av längd i-1 Exempel: spelkort 729G04
Insättningssort • Procedure insertionsort(A) • for j =2 to length(A) • key = A[j] • i= j - 1 • while i > 0 and A [ i ] > key • A[ i +1 ] = A[ i ] • i = i -1 • end • A [i +1] = key • End Exempel: SorteraA=(4 6 1 19) (avbugga..) 729G04
Insättningssort Egenskaper • Enkelt att implementera • Effektiv för små mängder • Bra att använda när listan är nästan ordnad • I praktiken effektivare än bubbelsort • Online, dvs. Enkel att använda om man får nya data • Man kan använda strukturen ”List” för att minska antalet byten • Komplexitet • Sämsta fall O(n2) • Normalfall O(n2) • Undre gräns O(n) 729G04
Vad ska jag läsa hemma? • Kursbok, s. 56-57 • Wikipedia • Utskrifter 729G04