1 / 28

Einführung in die Programmierung Algorithmen

Fakultät für Wirtschaftswissenschaften. Einführung in die Programmierung Algorithmen. Uwe Lämmel. www.wi.hs-wismar.de/~laemmel Uwe.Laemmel@hs-wismar.de. Inhalt. Suchen lineare Suche binäre Suche Sortieren Sortieren durch Auswahl Sortieren durch Vertauschen (Quicksort)

bette
Download Presentation

Einführung in die Programmierung Algorithmen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Fakultät für Wirtschaftswissenschaften Einführung in die ProgrammierungAlgorithmen Uwe Lämmel www.wi.hs-wismar.de/~laemmel Uwe.Laemmel@hs-wismar.de

  2. Inhalt • Suchen • lineare Suche • binäre Suche • Sortieren • Sortieren durch Auswahl • Sortieren durch Vertauschen • (Quicksort) • dabei benutzte Konzepte • ausführbare Klasse • statische Methoden • Array

  3. Suche in einer beliebigen Folge tom bea pit mae mia lea tim kai ende anf Lineare Suche • Alle Elemente, vom 1. bis zum letzten,durchsuchen • Folge kann unsortiert sein! • Ergebnis ist der Index unten=anf; oben=ende–1;int next= anf;while (next<=oben&&folge[next]!=gesucht) { next++;} if ( next<=oben ) return next; elsereturn –1;

  4. Suche in einer sortierten Folge bea kai lea mae mia pit tim tom ende anf binäre Suche • Folge muss sortiert sein! • Halbieren des Suchraumes, durch Vergleich mit gesuchtem Element unten = anf; oben = ende –1;int next = (unten+oben)/2;while ( unten<oben&&folge[next]!=gesucht ) {if ( gesucht<folge[next] ) oben=next –1; else unten=next+1; next = ( unten+oben ) / 2;} //whileif (folge[next]==gesucht) return next; elsereturn –1;

  5. Sortieren • Definition • Assoziative Sortierverfahren: • durch Auswahl: Select-Sort • durch Vertauschen: Bubble Sort • ... • Adressenorientiertes Sortieren

  6. Definition einer sortierten Folge? Eine Folge von n Elementen ist sortiert, wenn an der 1.-ten Position das Minimum der Folge steht, und die Folge vom 2. bis zum (n)-ten Element sortiert ist ! Eine Folge aus einem Element ist sortiert.  Select-Sort Eine Folge von n Elementen ai ist sortiert, falls für alle i: 1<in gilt: ai>ai-1  Bubble-Sort

  7. 50 77 3 43 78 1 27 2 3 1 2 3 27 78 50 43 77 0 4 1 77 3 43 78 50 27 2 1 2 3 27 43 50 78 77 1 5 1 2 3 43 78 50 27 77 1 2 3 27 43 50 78 77 6 1 2 3 43 78 50 27 77 1 2 3 27 43 50 77 78 3 Select-Sort: Beispiel 2

  8. Select-Sort: rekursiv • Vektor feld: Position anf..ende–1 belegt • Noch 2 Elemente in Folge (anf<ende-1), dann • Bestimme Position des Minimums • Tausche Minimum mit erstem Element • Sortiere die Restfolge (ab anf+1)

  9. Select–Sort: iterativ • Vektor feld: Position anf..ende–1 belegt • Von der ersten (anf.) bis zur vorletzten Position wiederhole in dieser Teilfolge: • Setze erstes Element als temporäres Minimum • Wiederhole bis zur letzten Position • Falls temporäres Minimum> als aktuelles Element, dann setze neuen Minimum • Setze Erstes Element an Stelle des Minimums • Setze Minimum an erste Position

  10. Bubble–Sort • Vektor feld: Position anf..(ende–1) belegt • Wiederhole von erster bis vorletzter Position • Falls Element < als Nachfolger dann tausche beide Elemente Bis nicht mehr getauscht wurde

  11. Klasse – Bibliothek • keine Beschreibung von Objekten • Menge von Methoden • siehe z.B. java.lang.Math • Methoden sind statisch – static publicstaticint ggT(int a, int b) { if(a==b) return a; else if(a>b) return ggT(a-b,b); elsereturn ggT(a,b-a); } //ggT

  12. Klasse – Bibliothek class Algorithmen { publicstaticint[ ] bubbleSort(int[ ] folge, int anf, int ende) { … } publicstaticint[ ] selectSort(int[ ] folge, int anf, int ende) { … } publicstaticint getMax(int[ ] folge, int anf, int ende) { … } publicstaticint finde(int[ ] folge, int anf, int ende, int el) { … } … publicstaticvoid ausgeben(int[ ] folge, int anf, int ende) { … } publicstaticint[ ] testfolge = {76,23,12,54,78,22,45,33,90,51,52,41}; } //Algorithmen

  13. Methode statisch oder nicht?Objekt oder nicht Objekt? statisch (static): • definiert in Bibliotheks- oder ausführbarer Klasse! publicstaticint finde(int[ ] folge,int anf, int ende, int el) { … }; • Aufruf: Methode wird nicht an Objekt gesendet!! index = finde(testfolge,0,8,51);eventuell Angabe der Klasse nötig: a = Math.sqrt(z); index =Algorithmen.finde(testfolge,0,8,51); dynamisch: • definiert Objekt-Verhalten in Bauplan-Klasse publicint finde(int el) { … }; • Aufruf: Methode wird an Objekt gesendet!index = telefonbuch.finde(110);

  14. !Üben! Aufgaben für statische Funktionen • Such-, und Sortiermethoden • Einlesen von Zahlen auf ein Array • Ausgabe eines Arrays • Methoden für natürliche Zahlen: • Test, ob Zahl ideal ist:Zahl = Summe aller echten Teiler • Test, ob eingegeben Zahl eine Primzahl ist • Berechnung aller Primzahlen bis zu einer vorgegebenen Zahl • Collatz-Funktion für alle Zahlen bis zu einer einzugebenden Grenze • …

  15. Ungewöhnliches Beispiel: Collatz-Funktion Collatz-Wert einer natürlichen Zahl n: = Anzahl der folgenden Schritte bis eine 1 erreicht wird: • Ist n gerade, dann wird durch 2 dividiert: n:=n div 2 • Ist n ungerade, dann: n:= 3n+1 • collatz(6)? • 3 • 10 • 5 • 16 • 8 • 4 • 2 • 1 • collatz(6)=8

  16. Rekursion • Definition einer Methode, wobei die Methode selbst hierzu benutzt wird • Rekursionsabbruch vor rekursivem Aufruf if ( Bedingung) rekursiver Aufrufelse kein rekursiver Aufruf (Rekursionsabbruch) • Problem muss beim rekursiven Aufruf kleiner werden: publicstaticlong fak(int n) { if (n > 0) return n*fak(n-1); elsereturn1; }//fak

  17. publicstaticlong fak(int n) { if (n > 0) return n*fak(n-1); elsereturn 1; } //fak 6 2 1 1 fak(3) 3 * fak(2) fak(2) 2 * fak(1) fak(1) 1 * fak(0) fak(0) 1 Fakultät: ein einfaches Beispiel

  18. fibonacci(5) fibonacci(4) fibonacci(3) fibonacci(2) fibonacci(2) fibonacci(3) fibonacci(1) fibonacci(2) fibonacci(1) Fibonacci(5) - Aufrufstruktur fibo(n) = 1, falls n=1 oder n=2 = fibo(n-1)+fibo(n-2) 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

  19. Turm von Hanoi • Turm vom Ausgangs- zum Zielort bewegen • Immer nur eine Etage • Es darf keine größere Etage auf eine kleinere gesetzt werden • Es steht nur ein Hilfsort zum Zwischenstapeln zur Verfügung Ausgangsort Zielort Hilfsort

  20. Quicksort • Pivot-Element festlegen: • erstes, mittleres, Median • wiederhole: • Zeiger von links bis El > Pivot • Zeiger von rechts bis El < Pivot • Falls Zeiger: links<rechts dann El tauschenund Zeiger weitersetzen bis Zeiger aneinander vorbei • sortiere den Abschnitt der kleineren Zahlen • sortiere den Abschnitt der größeren Zahlen

  21. Quicksort staticint[ ] quicksort(int[ ] folge, int anf, int ende) { int pivot; // Element zum Vergleich int hilf; int gk, gg; // GrenzeKleinere,GrenzeGroessere if (anf<ende) { // noch mind. zwei Elemente? pivot=folge[anf]; gk=anf; gg=ende; do { // Solange noch nicht alles verteilt while (folge[gk]<pivot) gk++; while (folge[gg]>pivot) gg--; if (gk<=gg) { // Vertausche gg-te mit gk-te Position hilf=folge[gg]; folge[gg]=folge[gk]; folge[gk]=hilf; gk++; gg--; } // if } while (gk<=gg); if (anf<gg) folge = quicksort(folge,anf,gg); // kleinereif (gk<ende) folge = quicksort(folge,gk,ende); // groessere } // if return folge; } //sort

  22. Das Firmen-Telefonbuch • Für jeden Mitarbeiter wird verwaltet: • Name, Vorname, ZimmerNummer, ApparatNummer • Die Firma wird nicht mehr als 50 Mitarbeiter in den nächsten Jahren haben. • Funktionalität: • Erfassen eines neuen Mitarbeiters • Ändern der Daten eines Mitarbeiters • Suche nach ZimmerNummer eines Mitarbeiters • Suche nach TelefonNummer eines Mitarbeiters • Anzeige aller Mitarbeiter in einem Zimmer • Anzeige aller Mitarbeiter mit einer bestimmten Apparatnummer • Ausgabe aller Informationen als Liste –sortiert nach:Namen oder Zimmernummer Implementieren Sie das Telefonbuch mittels eines Array von Mitarbeiter-Objekten

  23. Strukturierte Anweisung: try-catch try { Anweisungen1 // geschützte Ausführung } catch ( ExceptionType) { Anweisungen2 // Fehlerbehandlung und Information } • Anweisungen1 werden ausgeführt: • falls Fehler (Ausnahme, Exception) und • Fehler ist vom Typ ExceptionTyp: • Anweisungen2 werden ausgeführt

  24. Strukturierte Anweisung: try-catch-Beispiel … do { try { int zahl = ea.readInt("Bitte Zahl eingeben: "); ende = (zahl== –1); // true, falls Zahl gleich –1 } catch (NumberFormatException ex){ ea.writeln(ex.getMessage()+ " Das wahr falsch!"); ende = false; } catch( IOException io) { } } while(!ende); • wiederholte Eingabe-Aufforderung:

  25. import java.io.*; /** * * Veranschaulichung der Wirkung der try-catch-Anweisung: * Wiederholte Eingabe-Aufforderung bis eine gültige Zahl eingegeben wurde. * Es werden zwei Ausnahmen behandelt: * - Die Ein-Aussgabe-Ausnahme (IOException) MUSS formuliert werden, * da jede Ein-, Ausgabe fehlerhaft sein kann: Datei nicht vorhanden ... * - Zahlenformat-Ausnahme KANN formuliert werden. Diese tritt in Kraft, wenn * der Nutzer eine ungültige Zahl eingibt. * * @version 1.0 vom 25.06.2010 * @author Uwe Lämmel */ public class TryCatch { public static void main(String[] args) { LineIO ea = new LineIO(); boolean ende = false; do{ try{ int zahl=ea.readInt("Bitte Zahl eingeben: "); ende = (zahl== -1); } catch(NumberFormatException ex){ ea.writeln(ex.getMessage()+ " Das wahr falsch!"); ende=false; } catch( IOException io){} } while(!ende); ea.writeln("Ende"); }//main }//TryCatch Nur zum Testen

  26. Mitarbeiter Telefonbuch Firma Element Telefonbuch – „uses“-Beziehungen

  27. Zusammenfassung • Suchen • lineare S. in unsortierten Folgen • binäre S. in sortierten Folgen • Maximum • Sortieren • durch Auswahl, • durch Vertauschen: Bubble, Quicksort • Klasse • Bauplanklasse, • Bibliotheksklasse • ausführbare Klasse, • statische Methode, main • rekursives Programmieren

  28. Ende

More Related