2. Gleichwertige Lösungen



Ähnliche Dokumente
2 Vollständige Induktion

Kapitel 6: Quadratisches Wachstum

Innerbetriebliche Leistungsverrechnung

1 Analysis T1 Übungsblatt 1

Übungen zur Vorlesung Funktionentheorie Sommersemester Musterlösung zu Blatt 0

15.4 Diskrete Zufallsvariablen

AUFGABENSTELLUNG (ZUSAMMENFASSUNG) 2 SPEZIFIKATION 2. Datenfluß und Programmablauf 2. Vorbedingung 3. Nachbedingung 3. Schleifeninvariante 3

Institut für Stochastik Prof. Dr. N. Bäuerle Dipl.-Math. S. Urban

BINOMIALKOEFFIZIENTEN. Stochastik und ihre Didaktik Referentin: Iris Winkler

... a ik) i=1...m, k=1...n A = = ( a mn

2. Diophantische Gleichungen

Nachklausur - Analysis 1 - Lösungen

Statistik Einführung // Konfidenzintervalle für einen Parameter 7 p.2/39

Allgemeine Lösungen der n-dimensionalen Laplace-Gleichung und ihre komplexe Variable

PrivatKredit. Direkt ans Ziel Ihrer Wünsche

Aufgaben und Lösungen der Probeklausur zur Analysis I

Satz Ein Boolescher Term t ist eine Tautologie genau dann, wenn t unerfüllbar ist.

Betriebswirtschaft Wirtschaftsmathematik Studienleistung BW-WMT-S

Statistik I/Empirie I

n 1,n 2,n 3,...,n k in der Stichprobe auftreten. Für die absolute Häufigkeit können wir auch die relative Häufigkeit einsetzen:

Die Gasgesetze. Die Beziehung zwischen Volumen und Temperatur (Gesetz von J.-L. und J. Charles): Gay-Lussac

Übungsblatt 1 zur Vorlesung Angewandte Stochastik

Finanzmathematische Formeln und Tabellen

e) ( 4a + 8b + 9a + 18b ) : a + 2b f) 2 log (x) + 3 log (2y) 0.5 log (z)

3. Tilgungsrechnung Tilgungsarten

Versicherungstechnik

Kleines Matrix-ABC. Fachgebiet Regelungstechnik Leiter: Prof. Dr.-Ing. Johann Reger. 1 Elementares

Das FSB Geldkonto. Einfache Abwicklung und attraktive Verzinsung. +++ Verzinsung aktuell bis zu 3,7% p.a. +++

Tao De / Pan JiaWei. Ihrig/Pflaumer Finanzmathematik Oldenburg Verlag 1999 =7.173,55 DM. ges: A m, A v

Kryptologie: Kryptographie und Kryptoanalyse Kryptologie ist die Wissenschaft, die sich mit dem Ver- und Entschlüsseln von Informationen befasst.

Zahlenfolgen, Grenzwerte und Zahlenreihen

Ausgangspunkt: Über einen endlichen Zeitraum wird aus einem Kapital (Rentenbarwert RBW v n,i

Stochastik für WiWi - Klausurvorbereitung

Stichproben im Rechnungswesen, Stichprobeninventur

Statistik mit Excel Themen-Special. Peter Wies. 1. Ausgabe, Februar 2014 W-EX2013S

BERUFSKOLLEG KAUFMÄNNISCHE SCHULEN DES KREISES DÜREN Zweijährige Höhere Handelsschule

Heute Kapitalanlage morgen ein Zuhause

Klasse: Platzziffer: Punkte: / Graph zu f

Korrekturrichtlinie zur Studienleistung Wirtschaftsmathematik am Betriebswirtschaft BB-WMT-S

Aufgabenblatt 4. A1. Definitionen. Lösungen. Zins = Rate Zinskurve = Zinsstruktur Rendite = Yield

Lerneinheit 2: Grundlagen der Investition und Finanzierung

Auch im Risikofall ist das Entscheidungsproblem gelöst, wenn eine dominante Aktion in A existiert.

Kapitel 4: Stationäre Prozesse

Mit Ideen begeistern. Mit Freude schenken.

Zur Definition. der wirksamen. Wärmespeicherkapazität

GIBS. Übungsaufgaben zur Vertiefung. V1. Beschriften Sie die Konstruktionen! n n n n ' ' ' ' Modul 1.5. Geometrische Optik 1 58.

Statistische Maßzahlen. Statistik Vorlesung, 10. März, Beispiel. Der Median. Beispiel. Der Median für klassifizierte Werte.

LV "Grundlagen der Informatik" Programmierung in C (Teil 2)

Vorkurs Mathematik für Informatiker Folgen

Informatik II Dynamische Programmierung

3Landlust auf Hofweier? Kaufpreis: ,00 Euro Courtage: 3,57% incl. 19% MwSt für den Käufer

1 Randomisierte Bestimmung des Medians

Gruppe 108: Janina Bär Christian Hörr Robert Rex

Private Altersvorsorge. Berufsunfähigkeitsschutz plus Steuerersparnis. Günstig vorsorgen durch Kombination mit unserer fondsgebundenen Basisrente.

Wiederkehrende XML-Inhalte in Adobe InDesign importieren

Mathematischer Vorkurs zum Studium der Physik

= T Jährliche Ratentilgung Jährliche Ratentilgung. Ausgangspunkt: Beispiel:

Medienzentrum. Bibliothek. Handreichung zur Literatursuche

Lösungen der Aufgaben zur Vorbereitung auf die Klausur Mathematik für Informatiker I

Grenzwert. 1. Der Grenzwert von monotonen, beschränkten Folgen

evohome Millionen Familien verfolgen ein Ziel: Energie zu sparen ohne auf Komfort zu verzichten

n=0 f(x) = log(1 + x) = n=1

VAIO-Link Kundenservice Broschüre

Flexibilität beim Lagern und Kommissionieren: Schienengeführte Regalbediengeräte

Linsengesetze und optische Instrumente

Gliederung. Value-at-Risk

Klausur Grundlagen der Investition und Finanzierung

Analysis ZAHLENFOLGEN Teil 4 : Monotonie

SUCHPROBLEME UND ALPHABETISCHE CODES

Vorlesung Informationssysteme

HONORAR Honorarabrechnung

6. Übung - Differenzengleichungen

x mit Hilfe eines linearen, zeitinvarianten

Finanzmathematik für HAK

Inhaltsverzeichnis. 1 Leistungsbeschreibung... 3

Folgen und Reihen. 23. Mai 2002

Baugrundstück für Individualisten

Abschlussprüfung 2014 an den Realschulen in Bayern

KUNDENPROFIL FÜR GELDANLAGEN

NEL Suchspulen - für jeden Detektor! TOP Leistung von unabhängigen Experten bestätigt. Such Spulen. nel-coils.de Shop ww.nuggets24.

Bau- und Wohncenter Stephansplatz

Die allgemeinen Daten zur Einrichtung von md cloud Sync auf Ihrem Smartphone lauten:

KAPITEL 7. Zahlenfolgen. 7.1 Konvergente Zahlenfolgen Grenzwertbestimmung Grenzwertbestimmung durch Abschätzung...

LOHN KUG, ATZ, Pfändung, Darlehen und Bescheinigungswesen

Kunde. Kontobewegung

Wirtschaftsmathematik

Projektmanagement Solarkraftwerke

2. Einführung in die Geometrische Optik

h i Deskriptive Statistik 1-dimensionale Daten Daten und Häufigkeiten Seite 1 Nominal Ordinal Metrisch (Kardinal) Metrisch - klassiert

Arbeitsplätze in SAP R/3 Modul PP

IM OSTEN VIEL NEUES... Kaufpreis: ,00 Euro 3,57% incl. 19% MwSt für den Käufer

KAPITEL 2. Zahlenfolgen

5 Bernoulli-Kette. 5.1 Bernoulli-Experiment. Jakob Bernoulli Schweizer Mathematiker und Physiker Einleitung

Qualitätskennzahlen für IT-Verfahren in der öffentlichen Verwaltung Lösungsansätze zur Beschreibung von Metriken nach V-Modell XT

Grundgesamtheitsanaylsen und Stichproben. Betrachtungen zur Stichprobenfindung

Einführung in die Grenzwerte

Lösungsskizzen Mathematik für Informatiker 6. Aufl. Kapitel 4 Peter Hartmann

Zahlenfolgen und Konvergenzkriterien

Kreisabbildungen. S 1 f S 1. Beispiele: (1) f = id, F = id,

Transkript:

8. Gleichwertige Lösuge Für die Lösug jeder lösbare Aufgabe gibt es eie uedliche Azahl vo (abstrakte ud kokrete) Algorithme. Das folgede Problem illustriert, dass eie Aufgabe eifacher oder kompliziert, aber auch schlechter oder besser gelöst werde ka... Maximale Teilsumme Wir habe de Kurs eier 000-Euro-Aktie der Firma MikroSofties verfolgt ud wisse vo jedem der letzte zeh Tage, wie viele Euro eie solche Aktie a diesem Tag a Wert gewoe bzw. verlore hat, z.b. so: Tag 3 4 5 6 7 8 9 0 Gewi/Verlust +5-8 +3 +3-5 +7 - -7 +3 +5 Tabelle.: Veräderug des Aktiewerts Isgesamt hat eie Aktie i de zeh Tage ihre Wert um +4 Euro verädert (weil + 5-8 + 3 + 3-5 + 7 - - 7 + 3 + 5 = +4 ist). Hätte ma solche Aktie umittelbar vor dem 3. Tag gekauft ud umittelbar ach dem 4. Tag verkauft, so hätte ma pro Aktie 6 Euro Gewi gemacht. Aufgabe.: Wie viel Gewi pro Aktie hätte ma (ierhalb der zeh Tage) maximal mache köe? Lösug: 8 Euro. Dazu hätte ma vor dem 3. Tag kaufe ud ach dem 6. Tag verkaufe oder aber vor dem 9. Tag kaufe ud ach dem 0. Tag verkaufe solle. We wir de Kurs eier Aktie icht ur 0 Tage, soder z.b. 365 Tage lag verfolgt habe, da ka es ziemlich mühevoll sei, eie güstigste Kauf- ud Verkaufstermi zu fide.... Summe ud Teilsumme Eie edliche Folge vo gaze Zahle hat auch eie edliche Summe. Beispielsweise hat die Folge (+5, -8, +3, +3, -5, +7, -, -7, +3, +5) die Summe +4. Als Defiitio köe wir festhalte: Eie Teilfolge eier Folge besteht aus eiem zusammehägede Teil der Folge. Jede Folge hat zwei extreme Teilfolge: die leere Teilfolge () ud die gesamte Folge (die auch als uechte Teilfolge bezeichet wird). A. Solymosi, U. Grude, Grudkurs Algorithme ud Datestrukture i JAVA, DOI 0.007/978-3-658-0696-8_, Spriger Fachmedie Wiesbade 04

. Gleichwertige Lösuge 9 Als ei weiteres Beispiel betrachte wir die Folge = (+5, -8, +3, +3, -5, +7, -, -7, +3, +5), die uter adere folgede Teilfolge besitzt: teilfolge = (+5, -8, +3, +3) // echte Teilfolge mit vier Elemete teilfolge = (+3, -5, +7, -, -7) // echte Teilfolge mit füf Elemete teilfolge3 = (+5) // echte Teilfolge mit eiem Elemet teilfolge4 = () // echte Teilfolge mit ull Elemete teilfolge5 = (+5, -8, +3, +3, -5, +7, -, -7, +3, +5) // uechte Teilfolge mit alle Elemete teilfolge3 kommt sogar mehrmals als Teilfolge i der obige Folge vor. Ist folge eie Folge ud teilfolge eie Teilfolge vo folge, so heißt die Summe vo teilfolge auch Teilsumme vo folge. Die Folge teilfolge, teilfolge, teilfolge3, teilfolge4 ud teilfolge5 habe beispielsweise die Summe +3, -4, +5, 0 ud +4. Also sid die Zahle +3, -4, +5, 0 ud +4 Teilsumme der obige Folge. Die Teilsumme +4 ka ma auch als uechte Teilsumme der Folge bezeiche, da es sich dabei um die Summe der Folge hadelt.... Aufgabestellug Sei folge eie edliche Folge vo gaze Zahle (i Form eier Reihug) gegebe. Im folgede Abschitt utersuche wir, wie ma die maximale Teilsumme vo folge bereche ka...3. Ituitive Lösug Ma erzeugt der Reihe ach alle Teilfolge der gegebee Folge, berechet vo jeder Teilfolge die Summe ud liefert die größte Summe als Ergebis, etwa so: static it maxteilsumme3(fial it[] folge) { it maxsumme = 0; // maximale Teilsumme ist midestes 0 (Summe der leere Teilfolge) for (it vo = 0; vo < folge.legth; vo++) for (it bis = vo; bis < folge.legth; bis++) { // Summe bilde it summe = 0; for (it i = vo; i <= bis; i++) summe += folge[i]; maxsumme = Math.max(summe, maxsumme); // Summe überprüfe, ob größer ; retur maxsumme; Wir verwede für Referezparameter das reservierte Wort fial im Sie vo cost, wie es i C++ bekat ist: Damit wolle wir adeute, dass das Parameterobjekt icht verädert cost ist ei reserviertes Wort i Java, wird aber vo de derzeitige Compiler icht ausgewertet

0. Gleichwertige Lösuge wird; fial i Java sichert ur die Uveräderbarkeit der Parameterreferez ierhalb des Methoderumpfs. Parameter primitiver Type (z.b. it) werde typischerweise im Methoderumpf icht verädert, daher lasse wir dort fial weg...4. Zeitkomplexität der Lösug Um etwas über die Schelligkeit der Fuktio maxteilsumme3 herauszufide, köte wir sie i eier bestimmte Umgebug laufe lasse ud dabei Zeitmessuge vorehme. Eie solche Umgebug ka z.b. aus eiem Studete bestehe, der Java-Programme mit Papier ud Bleistift ausführe ka. Auf eiem Recher köe wir eie Umgebug fide, zu der folgede Dige gehöre: ei Java-Compiler, der de Programmtext vo maxteilsumme3 i Bytecode umwadelt der Java-Iterpreter, der de Bytecode ausführt das Betriebssystem, uter dem der Iterpreter abläuft die Hardware, auf der der Iterpreter ud das Betriebssystem ausgeführt werde. Solche Zeitmessuge köe us sehr kokrete Erketisse über die Schelligkeit der Fuktio i eier kokrete Umgebug liefer. Adererseits habe sie de Nachteil, ur für diese eie Umgebug zu gelte. Kokrete Zeitmessuge sage also direkt ur etwas über die Kombiatio userer Fuktio maxteilsumme3 mit eier Umgebug aus. Über usere Fuktio maxteilsumme3 (ud de abstrakte Algorithmus, de sie darstellt) sage sie direkt ichts aus. Wir iteressiere us hier aber i erster Liie icht für Umgebuge, soder für Eigeschafte der Fuktio maxteilsumme3. Umgebuge habe die uageehme Eigeschaft, sehr zahlreich ud sehr vergäglich zu sei. Heute scho gibt es uübersehbar viele verschiedee Hardwarechips, Betriebssysteme ud Compiler. Ud i ei paar Jahre wird es sicherlich och mehr ud gaz adere Hardwarechips, Betriebssysteme ud Compiler gebe. User Ziel soll es deshalb sei, etwas über die Schelligkeit der Fuktio maxteilsumme3 herauszufide, was möglichst uabhägig vo kokrete Umgebuge ist ud auch och i ei paar Jahre gilt. Wie lage die Fuktio maxteilsumme3 braucht, um die maximale Teilsumme eier Folge zu bereche, wird (vermutlich auch i de Umgebuge, die us i ei paar Jahre zur Verfügug stehe) vo der Läge der Folge abhäge. Aber wie hägt der Zeitbedarf der Fuktio maxteilsumme3 vo der Läge ihres Parameters ab? Oder: Wie verädert sich der Zeitbedarf vo maxteilsumme3, we wir die Läge vo folge verdoppel, verdreifache, vervierfache usw.? Utersuche wir dazu die folgede Frage: z.b. PC mit eiem 500 MHz Petium III-Prozessor uter MS-Widows NT Versio 4.0 ud dem jdk-compiler, Versio. (bei der. Auflage galt scho als veraltet)

. Gleichwertige Lösuge Aufgabe.3: Wie oft wird Math.max i der Fuktio maxteilsumme3 aufgerufe, we die Reihug folge geau Elemete umfasst? Aufgabe.4: Wie oft wird die Additio summe += folge[i] ausgeführt (we folge.legth gleich ist)? Lösug: Math.max wird auf die Summe jeder echte Teilfolge vo folge geau eimal agewedet. Wie viele echte Teilfolge hat eie Folge der Läge? Es ist offesichtlich, dass eie Folge der Läge Teilfolge der Läge -0 ud Teilfolge der Läge - ud 3 Teilfolge der Läge - ud - Teilfolge der Läge 3 ud - Teilfolge der Läge ud -0 Teilfolge der Läge. hat. Für die Azahl der echte Teilfolge eier Folge der Läge gilt also: 3... ( ) ( ) i i ( ) ( Diese Formel besagt, wie oft der Vergleich maxsumme < summe ausgeführt wird. ) Jedes Elemet vo jeder Teilfolge wird geau eimal auf die Summe addiert. Für die Azahl der Additioe gilt also: i ( i( i) i i i ) ( i i i i i ) ( )( ) 6 6 i 3 i Wir sehe: Die Azahl der Vergleiche wächst im Wesetliche mit. Die Azahl der Summieruge wächst im Wesetliche mit 3. We geüged groß ist, werde die Additioe de größte Teil der Laufzeit vo maxteilsumme3 verbrauche, selbst we ei Vergleich ei Vielfaches der Zeit eier Additio koste würde. Das Ergebis userer Utersuchug: Der Zeitbedarf der Fuktio maxteilsumme3 wird für große vermutlich mit der dritte Potez vo (der Läge des Parameters folge) wachse. Das heißt z.b.: We wir verdoppel (d.h. ver--fache), da steigt der Zeitbedarf auf das 8-fache (weil 3 =8 ist). Diese abstrakte Erketis ist uabhägig davo, ob wir die Fuktio maxteilsumme3 auf eiem PC oder eiem Supercomputer laufe lasse. Ud sie wird wahrscheilich och ei paar Jahre gültig bleibe. 3

. Gleichwertige Lösuge Etwas iformell ka die Komplexität am Programmtext erkat werde: Die dreifach geschachtelte Schleife deutet auf eie kubische Komplexität hi. Aufgabe.5: Ist es möglich, dass ma i Zukuft eie Umgebug (Compiler, Betriebssystem, Hardwarechip) etwickelt, i der die Fuktio maxteilsumme3 ausgeführt werde ka ud i der ihr Zeitbedarf icht mit der dritte Potez vo wächst? Wie köte ma das erreiche? Oder ist es umöglich, das zu erreiche? Aufgabe.6: Wie viel Speicherplatz beötigt die Fuktio maxteilsumme3? Versuche Sie, diese Frage icht zu kokret zu beatworte...5. Zeit für Raum We geüged Speicher zur Verfügug steht, ka die Zeitkomplexität auf O( ) reduziert werde, idem die Teilsumme i eier -Matrix gespeichert werde. Sie köe für die Berechug aderer Teilsumme gebraucht werde ud ihre ereute Berechug bleibt auf diese Weise erspart: Für die Berechug der Teilsumme vom Idex i bis zum Idex j brauche wir ur eie Additio, we die Teilsumme vom Idex i bis zum Idex j- aus der Matrix geholt werde ka. Im Gegesatz dazu hat die ituitive Lösug aus dem vorige Kapitel j-i Additioe gebraucht. Zu diesem Zweck wird i eier doppelt geschachtelte Schleife jede Teilsumme (vom Idex i bis zum Idex j) errechet ud im (i, j)-te Elemet der Matrix gespeichert. I eier zweite geschachtelte Schleife wird u das Maximum aller Summe ermittelt. Diese Vorgehesweise mit eier halbe, d.h. a der Diagoale durchgeschittee Matrix (Dreiecktabelle) ka folgedermaße als Java-Fuktio formuliert werde: static it maxteilsumme(fial it[] folge) { fial it = folge.legth; it[][] teilsumme = ew it [][]; /* Dreiecktabelle der Teilsumme: für i j gilt teilsumme[i][j] ist Teilsumme i bis j, d.h. folge[i]+folge[i+]+ +folge[j] */ /* Jede Kompoete teilsumme[vo] mit eier it-reihug der richtige Läge (ämlich -vo) iitialisiere ud die 0-te Kompoete dieser it-reihug mit dem it-wert folge[vo] (mit der Summe der Teilfolge folge[vo..vo]) iitialisiere: */ for (it vo = 0; vo < folge.legth; vo++) { teilsumme[vo] = ew it[ - vo]; // vo-te Zeile des Dreiecks erzeuge teilsumme[vo][0] = folge[vo]; // 0-te Kompoete iitialisiere // die Spalte 0 vo teilsumme wurde iitialisiert; jetzt die übrige Spalte iitialisiere: for (it vo = 0; vo < ; vo++) for (it bis = ; bis < - vo; bis++) teilsumme[vo][bis] = teilsumme[vo][bis - ] + folge[vo + bis]; mit de Laufvariable vo, bis ud i Mathematiker sage Matrix, Java-Programmierer sage Tabelle

. Gleichwertige Lösuge 3 /* Teilsumme 0 bis,, 0 bis -: Auf die vorherige Teilsumme wurde das ächste Elemet addiert. */ // die maximale Kompoete i teilsumme ermittel: it maxsumme = 0; for (it vo = 0; vo < ; vo++) for (it bis = 0; bis < - vo; bis++) maxsumme = Math.max(maxSumme, teilsumme[vo][bis]); retur maxsumme; I dieser Lösug habe wir Laufzeit gespart, idem wir Speicherplatz geopfert habe: Aus de ur doppelt geschachtelte Schleife ist es ersichtlich, dass dieser Algorithmus eie Zeitkomplexität vo ur O( ) hat. Dafür muss hier die Dreiecktabelle teilsumme erzeugt werde, dere Größe mit auch quadratisch wächst: Die Speicherkomplexität ist also im Gegesatz zu maxteilsumme3 jetzt O( ). Diese Überlegug gilt allerdigs ur für hireiched große. Für kleies (z.b. für = 3) ka es durchaus vorkomme, dass die Fuktio maxteilsumme3 scheller ist. Dies gilt allgemei für Komplexitätsbetrachtuge: Eie bessere Komplexität ergibt eie bessere Laufzeit oder eie bessere Speicherplatzbedarf ur bei hireiched großer Date(mege). Für kleie Date(mege) ka ei schlechterer Algorithmus durchaus geeigeter sei...6. Teile ud herrsche Wir wolle jetzt eie och schellere Algorithmus kostruiere, mit dem ma die größte Teilsumme eier Zahlefolge bereche ka. Dabei wolle wir eier Strategie folge, die sich bei der Lösug vieler Probleme bewährt hat. Diese Strategie wird häufig Teile-ud-herrsche-Strategie geat ud ist als politisch-militärische Strategie midestes seit Machiavelli 3 (wahrscheilich aber scho viel läger) bekat. Auf ei algorithmisches Problem agewedet, legt diese Strategie folgede Vorgehesweise ahe:. Ma immt das gesamte Problem (z.b. Berechug der maximale Teilsumme vo folge) ud teilt es i mehrere Teilprobleme ei. Besoders häufig teilt ma das Gesamtproblem i zwei etwa gleich große Teilprobleme ei.. Ma löst die Teilprobleme. 3. Aus der Lösug der Teilprobleme errechet ma eie Lösug für das Gesamtproblem. mit de Laufvariable vo ud bis maxteilsumme3 kommt mit kostatem Speicher aus, d.h. der verbrauchte Speicher wächst icht mit ; seie Speicherkomplexität ist O( 0 ) = O() 3 italieischer Historiker ud Stratege, 469-57

4. Gleichwertige Lösuge Besoders iteressat ist diese Strategie, we ma sie rekursiv awede ka, d.h. we ma die Teilprobleme ach der gleiche Strategie i och kleiere Teil-Teilprobleme aufteile ka, ud diese Teil-Teilprobleme i och kleiere Teil-Teil-Teilprobleme usw., bis ma ur och atomare Problemche" hat, die ma direkt (d.h. ohe weitere Teilug) löse ka. Wie köe wir das Problem Bereche die maximale Teilsumme vo folge i zwei ugefähr gleich große Teilprobleme zerlege? Offebar geügt es icht, folge i zwei ugefähr gleich große Hälfte likehaelfte ud rechtehaelfte zu teile, vo jeder Hälfte die maximale Teilsumme zu bereche ud die größere dieser beide Teilsumme als Gesamtergebis zu ehme. De die maximale Teilsumme vo folge köte die Summe eier Folge sei, die teilweise i likehaelfte ud teilweise i rechtehaelfte liegt. Beispiel: Sei folge = (-, -, -, +, +, +, +, -, -, -). Die maximale Teilsumme ist offebar +4, ud die zugehörige Teilfolge (+, +, +, +) liegt teilweise i likehaelfte = (-, -, -, +, +) ud teilweise i rechtehaelfte = (+, +, -, -, -) vo folge. Eiige zusätzliche Begriffe werde die Kostruktio eies fuktioierede Algorithmus erleichter. Defiitio: Wir habe eie Folge folge ud betrachte alle Teilfolge, die irgedwo i folge afage ud bis zum rechte Rad vo folge reiche. Eie solche Teilfolge vo folge ee wir eie rechte Radfolge vo folge. Jede rechte Radfolge hat eie Summe. Jetzt betrachte wir die Summe aller rechte Radfolge vo folge. Die größte dieser Summe heißt auch rechtes Radmaximum vo folge. Like Radfolge ud likes Radmaximum werde aalog defiiert. Aufgabe.7: Bereche Sie vo folgede Folge jeweils die maximale Teilsumme sowie das rechte ud das like Radmaximum: folge = (-3, +5, -0, +4, +8, -4, -9, -, +3, +) folge = (+3, -, +5, -0, +3, +3) folge3 = (-0, +5, +3) folge4 = (+, +, +) folge5 = (-, -, -) folge6 = (+7) folge7 = (-7) folge8 = () Algorithmus zur Berechug der maximale Teilsumme eier Folge folge ach der Teileud-herrsche-Strategie:. We folge ur aus eier Zahl zahl besteht, da imm das Maximum vo zahl ud 0.. We folge aus zwei oder mehr Zahle besteht da:.. Teile folge i zwei etwa gleich große Hälfte likehaelfte ud rechtehaelfte.

. Gleichwertige Lösuge 5.. Bereche die maximale Teilsumme maxliks ud das rechte Radmaximum rechtesradmax vo likehaelfte..3. Bereche die maximale Teilsumme maxrechts ud das like Radmaximum likesradmax vo rechtehaelfte..4. Das Maximum der drei Zahle maxliks, maxrechts ud rechtesradmax + likesradmax ist die maximale Teilsumme vo folge. Im folgede Programm formuliere wir zwei Java-Fuktioe mit dem überladee Name maxteilsummerekursiv. Die Versio mit eiem Parameter vom Typ it[] stellt die Lösug der Aufgabe dar: private static it rechtesradmax(fial it[] folge, it liks, it rechts) { // // requires 0 <= liks <= rechts < folge.legth // berechet rechtes Radmaximum i folge zwische liks ud rechts it bishermax = 0, bishersum = 0; for (it i = rechts; i >= liks; i--) { bishersum += folge[i]; bishermax = Math.max(bisherMax, bishersum); ; retur bishermax; private static it likesradmax(fial it[] folge, it liks, it rechts) { // requires 0 <= liks <= rechts < folge.legth // berechet likes Radmaximum i folge zwische liks ud rechts it bishermax = 0, bishersum = 0; for (it i = liks; i <= rechts; i++) { bishersum += folge[i]; bishermax = Math.max(bisherMax, bishersum); ; retur bishermax; private static it maxteilsummerekursiv(fial it[]folge, it liks, it rechts) { // requires 0 <= liks <= rechts < folge.legth // berechet maximale Teilsumme i folge zwische liks ud rechts if (liks == rechts) // ur ei Elemet retur Math.max(0, folge[liks]); else { fial it mitte = (rechts + liks)/; fial it maxliks = maxteilsummerekursiv(folge, liks, mitte); fial it maxrechts = maxteilsummerekursiv(folge, mitte+, rechts); fial it rechtesmax = rechtesradmax(folge, liks, mitte); // like Hälfte ladsläufig: überladee Fuktioe ; jedoch icht die Fuktio, soder ihr Name wird überlade Methode sollte private vereibart werde, we sie ur ierhalb der Klasse aufgerufe werde. I diesem Buch wurde die meiste Methode paketweit (d.h. ohe Zugriffschutz) formuliert, außer we die Zugreifbarkeit betot werde soll.

6. Gleichwertige Lösuge fial it likesmax = likesradmax(folge, mitte+, rechts); // rechte Hälfte retur Math.max(maxRechts, Math.max(maxLiks, rechtesmax + likesmax)); public static it maxteilsummerekursiv(fial it[] folge) { // berechet maximale Teilsumme vo folge retur maxteilsummerekursiv(folge, 0, folge.legth-); Aufgabe.8: Wie oft ka ma eie Folge der Läge, der Läge 4, der Läge 8,, der Läge 04 i zwei gleiche Hälfte teile? Aufgabe.9: Wie oft ka ma eie Folge der Läge 37, der Läge 578 oder der Läge 34 i zwei ugefähr gleich große Hälfte teile? Aufgabe.0: We ma die Fuktio maxteilsummerekursiv mit eier Folge der Läge als Parameter aufruft, wie oft ruft sie sich da rekursiv auf? Aufgabe.: Wie viele Befehle werde bei jedem Aufruf vo maxteilsummerekursiv ausgeführt, we ma die rekursive Aufrufe vo maxteilsummerekursiv icht mitzählt? Aufgabe.: Begrüde Sie, dass der Zeitbedarf der Fuktio maxteilsummerekursiv proportioal zu log wächst. Aufgabe.3: Diskutiere Sie die Geschwidigkeite der Fuktioe maxteilsumme3, maxteilsumme ud maxteilsummerekursiv relativ zueiader. Ist maxteilsummerekursiv immer scheller als maxteilsumme3? Welche Rolle spiele die Umgebuge (Compiler, Hardware usw.), i dee die Fuktioe ablaufe?..7. Die optimale Lösug Die Fuktio maxteilsumme3 hat eie Zeitkomplexität vo O( 3 ), maxteilsumme hat eie Zeitkomplexität vo O( ), maxteilsummerekursiv hat eie Zeitkomplexität vo O( log ). Damit ist maxteilsummerekursiv (als abstrakter Algorithmus) viel scheller als maxteilsumme3. Häufig ist es so, dass die Teile-ud-herrsche-Strategie zu eiem schellste Algorithmus führt. Für das Problem der maximale Teilsumme eier Folge ist das icht der Fall. Es gibt eie och schellere Algorithmus als maxteilsummerekursiv. Auch für die Fuktio maxteilsummerekursiv gilt: Sie fasst jedes Elemet der Folge folge mehrmals a. Das tut sie, we sie die (rechte ud like) Radmaxima der beide Hälf- i wie viele Schritte: Eie Folge der Läge 8 wird im. Schritt i zwei Folge der Läge 4, im. Schritt i vier Folge der Läge ud im 3. Schritt i acht Folge der Läge geteilt. we es icht geau aufgeht : Eie Folge der Läge 37 ka i eie Folge der Läge 8 ud eie Folge der Läge 9 aufgeteilt werde, die ugefähr gleich lag sid.

. Gleichwertige Lösuge 7 te, ud da der Hälfte der Hälfte usw. der Folge folge berechet. Es ist aber möglich, die maximale Teilsumme vo folge zu bereche, idem ma jedes Elemet vo folge ur geau eimal afasst. Algorithmus zur Berechug der maximale Teilsumme vo folge, bei dem jedes Elemet ur eimal agefasst wird: Wir gehe elemetweise vo liks ach rechts durch folge. Bei jedem Schritt bereche wir für die scho utersuchte like Teilfolge vo folge (sie begit am Afag vo folge ud edet bei dem Elemet, welches wir gerade utersuche):. die maximale Teilsumme dieser like Teilfolge ud. das rechte Radmaximum dieser like Teilfolge. static it maxteilsumme(fial it[] folge) { it bishermax = 0; it radmax = 0; for (it zahl : folge) { // Zählschleife radmax = Math.max(0, radmax + zahl); bishermax = Math.max(bisherMax, radmax); ; retur bishermax; Aufgabe.4: Wie verädert sich der Zeitbedarf der Fuktio maxteilsumme we wir die Läge vo folge verdoppel? Welche Zeitkomplexität hat die Fuktio maxteilsumme also? Aufgabe.5: Halte Sie es für möglich, dass ma i Zukuft eie Algorithmus maxteilsumme0 fidet, der das selbe Problem löst wie maxteilsumme, aber eie och bessere Zeitkomplexität besitzt? We ja: Wie köte maxteilsumme0 fuktioiere? We ei: warum icht? Warug: Für das hier behadelte Problem der maximale Teilsumme eier Folge ud die vier Lösuge maxteilsumme3, maxteilsumme, maxteilsummerekursiv ud maxteilsumme gilt: maxteilsumme hat eie bessere Zeitkomplexität, besteht aus weiger Zeile Java-Text ud ist wohl icht schwerer zu verstehe als die adere Lösuge. Die Fuktio maxteilsumme vereit also alle Vorzüge auf sich. Das ist utypisch. Für viele bekate Probleme gilt: Je besser die Lösug, desto umfagreicher ud schwerer verstädlich ist sie. Aber der Wuschtraum eies jede Algorithmebauers ist es, für ei bekates Problem eie Lösugsalgorithmus zu fide, der scheller ist, weiger Speicher braucht, sich kürzer darstelle lässt ud leichter verstädlich ist als alle bisher bekate Lösuge. Das Sprachelemet Zählschleife (oder verbesserte for-schleife ) ab der Java Versio 5 ermöglicht, alle Elemete aus eier Reihug i eie Variable hieizulese ud sie im Schleiferumpf zu verwede.

http://www.spriger.com/978-3-658-0695-