Übungsblatt 7


3- Java erlauben mehr Speicher zu verwenden…


Ja, aber es ist nich „schöne“ Lösung. Was passiert, wenn z.B. depth = 10000 ist ? :wink:


Das kannst du ja vorher nicht wissen, es gibt nunmal einfach Probleme die letztendlich nur über den Speicherbedarf begrenzt sind… und da ist es nunmal erforderlich diesen zu erhöhen. Ich mein ein Supercomputer hat ja auch nicht nur 250 MB speicher pro node, sondern geht dann wohl eher in die Richtung 16GB…


Ihr dürft davon ausgehen, dass wenn ihr das iterativ löst in die unteren Punkteregionen rutschen werdet.

Und so ist dass nun mal mit Rekursionen die exponentiell wachsen, so viel ist da halt nicht drin :wink:


Ich hab mal noch eine Frage bezüglich der random()-Methode.

Ich habe eine Formel, die mir (nachgerechnet und mehrfach überprüft) nur Werte in dem Intervall [min…max] zurückgeben kann.
Dennoch ist es so, dass bei der voreingestellten Fenstergröße von 640x480px manchmal ein Punkt außerhalb des Fensters landet (eigentlich immer nur unten raus).
Kann es sein, dass bei der Erstellung des Fensters die Fensterleiste oben dazugezählt wird, beim “Hinmalen” des Graphen aber nicht mehr (hier also die innere Kante verwendet wird)?
Anders kann zumindest ich mir das nicht erklären :wink:
Sollen wir so was abfangen?

Wenn es doch was anderes sein kann, sagt es mir, aber meine Random-Methode stimmt…

Zur Veranschaulichung: Screenshot angehängt! Ich hoffe, daraus wird klar, was ich sagen will :wink:
http://rupran.einserver.de/files/Subdivide.jpg

Edit: Nochmal anders getestet… wenn man den vorhandenen Punkt C auf 475px o.ä. setzt, verschwindet er auch unten raus… Werden also wohl tatsächlich 2 verschiedene Ausgangspunkte verwendet… ^^
http://rupran.einserver.de/files/Subdivide_475.jpg


Mich hat da jemand wegen der 7.1c) angeschrieben, und zwar hat die Person Probleme, dass die iterative Version gleiche Ergebnisse liefert wie die Rekursive, nun meiner Meinung nach tut die rekursive Version ja auch falsche Ergebnisse liefern für k > n, denn wenn man das Pascalsche Dreieck anschaut für die Eingabe n=4, k = 8 gibts in der 4. Zeile keine 8. Spalte, der Taschenrechner weigert sich ebenfalls und wiki meint auch dazu, dass das Ergebnis in dem Fall 0 wäre… Nun stellt sich die Frage, ob man diesen “Fehler” der rekursiven Variante nachbauen sollte, oder es nicht braucht…

MfG


afaik : “k” kann nicht großer als “n” sein.

imho : Nachbauen eine Fehler ist nicht gewünscht. nebendem solltest du mehr codieren, um eine Fehler zu impelentieren. Meine iterative Methode liefert 0, wenn k > n ist. Ich denke, dass kein Tutor das beanstandet.


Ja wenn die k > n gilt ist die rekursive Variante nicht darauf vorbereitet. Aber diesen Fall müsst ihr nicht beachten. (Das erste Programm würde z.b. für negative Eingaben auch nie terminieren)
Solange ihr bei der iterativen Version des Koeff. die Finger von der Fakultät lasst ist alles in Butter


ich hab ne frage zur 7.3 a)
Sollen wir nur die Abläufe zwischen den 5 Abbildungen beschreiben und als abbruchbedingung dann [m]“Würde man in Abb. 2 (rechts) feststellen, dass sowohl |PE| < r als auch |EC| < r gilt, so würde
diese neue Kontrollkurve nicht nochmals verfeinert”
[/m] nehmen, oder wie viele schritte stellt ihr euch so vor?


Das wäre z.B. kein Stichpunkt. Was wir uns vorstellen Siehst du ja bereits in der Angabe (2 Zeilen sind bereits vorgegeben).

Die Idee an dieser Aufgabe ist es sich Gedanken darüber zu machen, wie der Algorithmus abläuft und diesen so prägnant wie möglich (und auf das wesentliche beschränkt) Schritt für Schritt zu formulieren. Dabei muss man darauf achten, welche neuen Daten (Zwischenergebnisse) im Rechner erzeugt werden, damit der Algorithmus läuft. Die Musterlösung hat um die 10 Stichpunkte.

Hoffe des hilft dir weiter. Wenn nicht, dann frag einfach nochmals :slight_smile:


Jetzt noch eine verständnisfrage:
Wenn meine neue Kontrollkurve zwischen z.B A, D, P erstellt wird, und ich das P aber gleichzeitig mit dem Objekt erzeuge würde dann folgende aussage stimmen:

  • Erstelle neue Kontrollkurve <A,D,(1. Finde Mittelpunkt P der Kante DE - 2. Erstelle den Mittelpunkt P der Kante DE) P>

Oder soll man davon ausgehen, dass der Punkt P vor der Kontrollkurve erstellt wird?

Ich hoffe man kann meine Frage verstehen :slight_smile:


Gleichzeitig wird der Punkt sicher nicht mit der Kurve erstellt nur weil es in einer Zeile steht :wink:


Aber wenn die methode die den punkt erstellt als parameter beim erstellen des objekts dabeisteht :S
also:
z.B.
kurve = new (A, D, DE.sucheMittelpunkt());
wird dann der punkt nicht “zur Laufzeit” erstellt oder verstehe ich das falsch? und wenn nicht wann wird er dann erstellt bzw. wo haben wir das in den Vorlesungsfolien?
danke im voraus


Ja klar, alle Objekte werden zur Laufzeit erstellt, davor wäre das auch schwer möglich. Das ganze soll ein „Rezept“ werden, sprich, noch ein bisschen informaler als Pseudocode, aber jede Zeile kurz und präzise genug um sich nicht durch nen Nebensatz-Jungle kämpfen zu müssen.


Also wenn das alles zur Laufzeit erstellt wird, dann wird doch der letzte Punkt (DE.sucheMittelpunkt()) der Kurve gleichzeitig mit der Kurve erstellt.
Und sollte es bei mir im Code so sein, dann müsste es ja doch irgendwie so heißen:
[m]- Erstelle neue Kontrollkurve <A,D,(1. Finde Mittelpunkt P der Kante DE - 2. Erstelle den Mittelpunkt P der Kante DE) P>[/m]
Oder sollen wir dann bei der Beschreibung lieber zuerst den Mittelpunkt erstellen und dann die Kontrollkurve? :smiley:


Auch wenn alles zur Laufzeit erstellt wird bin ich mir ziemlich sicher dass der Punkt vor der Kurve erstellt wird :wink:


Noch mal zur Aufgabe 7.1:

Soll der Output von 7.1 b und 7.1 c jetzt an dem Output der vorgegebenen Methoden angepasst werden? Weil da lässt sich locker alles faken bis auf die NegativeArraySizeException in 7.1 b (kann dafür StackOverflowError anbieten :nuts: ). Falls der Output nicht gefaket werden soll, sollen die Sonderfälle dann passend bearbeitet werden und ist es egal was für Werte dann zurückgeliefert werden?


Ich vermute mal stark, dass sich unsere Methoden nur für sinnvolle Parameter so verhalten sollen wie die vorgegebenen Methoden. Alles weitere kannst du ja als netten Scherz trotzdem nachbilden :wink:

Das lässt sich doch 1a nachbilden: einfach ein Dummy-Array anlegen und den Zugriff machen… ich hätte eher Probleme den StackOverflow von binom() iterativ nachzubilden :smiley:


Mal ne Grundsätzliche Frage:

Nur weil die Funktionswerte von upper und lower das gleiche vorzeichen haben kann doch trotzdem dazwischen eine gerade anzahl an Nullstellen existieren oder? was soll diese Bedingung eigentlich?

bei mir greift nämlich immer diese if - bedingung wenn ich AnotherFunction berechnen will und er gibt NaN aus.


Kann, muss aber nicht. Das größere Problem ist aber: Wie willst du in der Rekursion dann entscheiden ob du links oder rechts weiter machst? D.h. du hast keine Information mehr und das Verfahren funktioniert nicht mehr und wenn du immer in beiden Hälften suchen willst hoffe ich du brauchst nie mehr wie 15-20 Versuche :wink: