Algoritmer och datastrukturer

Slides:



Advertisements
Liknande presentationer
Visual Basic - Genomgång
Advertisements

Talföljder formler och summor
Populärt brukar algebra ibland kallas för bokstavsräkning
Funktioner och programorganisation
2D1311 Programmeringsteknik med PBL
Programmeringsteknik Föreläsning 13 Skolan för Datavetenskap och kommunikation.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella.
Föreläsning 2 21 jan 2008.
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)
Föreläsning 7 Analys av algoritmer T(n) och ordo
P-uppgiften: regler, planering och specifikation
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Lite mer rekursivitet -Sorterrings algoritmer -- Kapitel 8 Algoritmer.
2D1311 Programmeringsteknik med PBL Föreläsning 6 Skolan för Datavetenskap och kommunikation.
Föreläsning 12 Matlab J-uppgiften.
Programmeringsteknik K och Media
Växjö 22 april -04Språk & logik: Parsning med kontextfria grammatiker1 DAB760:Språk och logik: 22 aprilParsning Leif Grönqvist
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Programmering B PHP Lektion 2
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Detection of similarity between documents Axel Bengtsson Ola Olsson
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
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
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Språkteknologiska metoder Språkteknologisk forskning och utveckling (HT 2006)
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 6: Semantik Statisk semantik Attributgrammatiker Dynamisk semantik Axiomatisk.
Grundläggande programmering
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Algoritmer. Ordet kommer från en persisk författare som kom från al’Khowârizmi (engelskans algorithm). Han skrev boken ’Kitab al jabr w’al-muqabala’.
Rekursiva algoritmer Hur När Bra/Dåligt (kap 7).
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
DD1310/DD1314/DA3009 Programmeringsteknik Föreläsning 2 Skolan för Datavetenskap och kommunikation.
Föreläsning 11 J-uppgiften. Nästa period ägnas åt J-uppgiften. Den är individuell, dvs man jobbar på egen hand med uppgiften (inte tillsammans med labbkompisen).
Namnrum, räckvidd och rekursion Linda Mannila
F. Drewes, Inst. f. datavetenskap1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella språk LISP, ML och.
Läsbar prolog CM 8.1. allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation.
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax Flertydighet i kontextfri.
Problemlösning. Programmeringsmetaforer Instruktion Konstruktion Problemlösning Adaptation Demonstration.
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.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Anders Sjögren Deklarationsområde och funktioner.
Föreläsning 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
Satslogik, forts. DAA701/716 Leif Grönqvist 5:e mars, 2003.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sorterings algoritmer.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
Logik med tillämpningar
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
Anders Sjögren Enkelt program med funktion /* two_func.c - a program that uses two functions in one file */ /* from Stephen Prata C Primer Plus ISBN
Program indata ? utdata 1/20 Vahid Mosavat, Nada, KTH.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax.
Algoritmer och loopar Algoritmer, beräkningsbarhet
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Anders Sjögren Funktioner något in och något annat ut.
KPP053, HT2015 MATLAB, Föreläsning 4
Populärt brukar algebra ibland kallas för bokstavsräkning
Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap
Föreläsning 11: Rekursion
Föreläsning 8: Exempel och problemlösning
Iteration – Repetitionssats - while
Snåla algoritmer Backtracking
ÄMNESHJUL MATEMATIK ÅK 3
Algoritmer och datastrukturer,förel. 10
Repetitionsföreläsning 1: Lite rekursion & problemlösning
”Klubbkonsult” Beskriva zonordförandens roll som "klubbkonsult"
Presentationens avskrift:

Algoritmer och datastrukturer HI1029 Håkan strömbeck Nicklas Brandefelt

Föreläsning 1 Inledande om algoritmer Rekursion Stacken vid rekursion Rekursion – iteration Möjliga vägar GCD Inlämningsuppgifter

Algoritm En algoritm är ett begränsat antal instruktioner/steg för att lösa en uppgift, som från givna indata med säkerhet leder till korrekta utdata. Precision - varje steg är noggrant bestämt Determinism -resultatet av varje steg är entydigt Ändlig - når målet efter ett ändligt antal steg

Ett exempel Problem: Hitta det största av tre tal Givet: Tre tal a, b och c. Sökt: Det största av de tre talen Algoritm (pseudokod): TRETALMAX(a,b,c) local x x ← a if b > x then x ← b if c > x then x ← c return (x)

Frågor Terminerar algoritmen Fungerar den för alla giltiga indata (gränsvärden) Producerar den korrekt resultat Är den tillräckligt effektiv, går den att effektivisera?

Rekursion Rekursion är en mycket mäktig problemlösnings-strategi Det är ofta det enklaste sättet att lösa ett problem och kräver ofta mycket mindre kod än alternativen (iteration) Däremot är det inte säkert att lösningen blir effektiv och specifikt brukar den kunna kräva mycket minne För den ovane känns rekursion ofta krångligt men när man fått grepp om tekniken är den oumbärlig

Rekursivt definierad talföljd Innan vi tittar på rekursion för problemlösning värmer vi upp med en rekursivt definierad talföljd Fibonacci-följden: fn = fn-1 + fn-2 , n=2,3,4,… f0 = f1 = 1 En funktion i C som beräknar godtyckligt Fibonaccital: 1 int f(int n){ 2 if(n==0| |n==1) 3 return 1; 4 else 5 return f(n−1)+f(n−2); 6 }

Rekursionsträd f(3)=f(2)+f(1) f(2)=f(1)+f(0) f(1)=1 f(1)=1 f(0)=1 1 int f(int n){ 2 if(n==0| |n==1) 3 return 1; 4 else 5 return f(n−1)+f(n−2); 6 } Observera att vi får ”räkna” ut f(1) två gånger

Stacken vid funktionsanrop När en funktion anropas i C, så skapas utrymme på stacken för de lokala variablerna, parametrarna och återhoppsadressen

Rekursivt-iterativt Det är bevisat matematiskt att alla problem som kan lösas rekursivt också kan lösas iterativt Att hitta den iterativa lösningen kan däremot vara svårt. Fibbonaci: Iterativt: int fib(int n) { int i,fi,fim1=1,fim2=1; for(i=2;i<=n;i++) fi=fim1+fim2; fim2=fim1; fim1=fi; } return fi; Rekursivt: int fib(int n) { if(n==0||n==1) return 1; else return fib(n-1)+fib(n-2); } Ännu bättre: Varje värde beräknas en gång!

Fakultet Nu ska vi titta på ett av de mest klassiska av problem att lösa rekursivt nämligen fakultet: Definition: n! = 12…(n-1)n Exempel 5! = 12345 Den rekursiva lösningen får vi genom att observera att 5! = 54! eller n!=n(n-1)! Rekursivt: int fak(int n) { if(n==0) return 1; else return n*fak(n-1); } Iterativt: int faki(int n) { int i,p=1; for(i=2;i<=n;i++) p*=i; return p; } Ökar vi n med 1 ökar antalet anrop av den rekursiva funktionen med ett och antalet varv i den iterativa rutinen med ett. Mängden arbete växer linjärt med n.

Gissa ett tal Vi ska konstruera en algoritm som ska hitta ”rätt” tal mellan tex 1 och 100. Vid varje gissning man gör får man veta om man gissat rätt, för högt eller för lågt. Algoritmen ska då hitta rätt tal på så få gissningar som möjligt. Hur skulle du göra? Kan du formulera en algoritm?

Lösning int gissa(int min, int max, int antal) { int x = (min+max)/2;//gissning if(x==hemlig) return antal; else if(x<hemlig) return gissa(x+1,max,antal+1); } return gissa(min, x-1, antal+1);

Antal möjliga vägar Hur många unika vägar finns det från övre högra hörnet till nedre vänstra hörnet om vi bara får gå väst och syd?

Lösning Vi löser problemet genom att gå alla vägar och räkna hur många det blir. Låt m vara antal rader och n vara antal kolumner Vid varje vägval kan vi då välja att gå väst och därmed minska n med ett eller gå syd och minska m med ett När m och n är noll är vi framme n = 6 m = 5

Algoritm

Rekursionsträd

Största gemensamma delaren Greatest common divisor: GCD(78,21)=3 Fås enklast med Euklides algoritm: GCD(78,21) 78 = 3  21 + 15 ger GCD(21,15) 21 = 1  15 + 6 ger GCD(15,6) 15 = 2  6 + 3 ger GCD(6,3) 6 = 2  3 + 0 ger GCD(3,0) och då är svaret 3!

Implementering Rekursiv:

Implementering Iterativ: -hakarna betyder avrunda nedåt till närmsta heltal

Inlämningsuppgifter Följande uppgifter redovisas senast måndag den 21 januari och kan inte redovisas senare: 1.5, 1.7, 1.9, 1.14, 1.15, 1.16 Dessa uppgifter bör göras nu för att ni ska kunna följa kursen på ett bra sätt. Övriga kan ni göra vid tillfälle för högre betyg. I början kommer jag prioritera att ta emot redovisningar av dessa tidsbegränsade uppgifter!