1 / 127

REKURSION + ITERATION

REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen. Die exakten Beweise wurden dazu in einem anderen Dokument gemacht. Produktion von wunderbaren Zahlen.

becka
Download Presentation

REKURSION + ITERATION

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. REKURSION + ITERATION

  2. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.Die exakten Beweise wurden dazu in einem anderen Dokument gemacht.

  3. Produktion von wunderbaren Zahlen.

  4. Dazu werden natürlich wieder die Regeln (zur Produktion) verwendet.Diese sind…

  5. ---3 ---5 {r; s} ------wobei rX={1; 2; 3; ...} und sX und r sr+s Regel 1, kurz R1 Zu einer Regel, die an der die leere Menge beteiligt ist, sagt man auch Axiom.Wir sagen zu den "Produkten" 3 und 5 jeweils Atom. Regel 2, kurz R2 Regel 3, kurz R3

  6. Die Produktion beginnt wie üblich mit dem "Urknall" (= leere Menge).D0 =  Welche Menge D1 wird dann danach produziert ?Welche Regel kann man dazu anwenden (verwenden)?

  7. Da es für den "Urknall" nur 2 Regeln gibt, kann man nur R1 und R2 verwenden. Also…

  8. Mit der leeren Menge beginnt alles  Aus dieser wird dann wieder (mit Hilfe von R1 und R2) die Menge D1 gebastelt 3 5 Wie sieht die Menge D2 aus? Wie wird sie gebastelt?

  9. Man darf jetzt beliebige Teilmengen aus D1 auswählen und auf diese eine Regel anwenden. Was ist die kleinste Teilmenge in D1? D1 3 5 Das ist die leere Menge. Welche Regeln kann man darauf anwenden? R1 und R2, also bekommt man die Elemente… 3 5 Auf welche weitere Teilmenge von D1 kann man welche Regel anwenden ? 8 Auf die Menge {3;5} . Dies ergibt das neue Element 3+5 = 8 D2

  10. Man darf jetzt beliebige Teilmengen aus D2 auswählen und auf diese eine Regel anwenden. Was ist die kleinste Teilmenge in D2? 3 5 D2 8 Das ist die leere Menge. Welche Regeln kann man darauf anwenden? 5 R1 und R2, also bekommt man die Elemente… 3 8 Auf welche weitere Teilmenge von D2 kann man welche Regeln anwenden ? Auf die Mengen {3;5}. Dies ergibt dann das neue Element 3+5 = 8 D3

  11. Auf welche weitere Teilmengen von D2 kann man welche Regeln anwenden ? 3 5 D2 Auf die Mengen {3;8}, {5;8} . Dies ergibt dann die neuen Elemente 3+8=11, 5+8=13 8 Dies geht unendlich oft weiter … Die Vereinigung all dieser Mengen ist die zu konstruierende GesamtmengeD = {3;5;8;11;13; …} der wunderbaren Zahlen 5 3 8 11 13 Welche mengentheoretische Beziehung besteht zwischen D0, D1, D2, D3, usw. ? D0D1D2D3 …  D D3

  12. Uns interessiert nun, ob eine Zahl zu der Gesamtmenge D gehört oder nicht. Dazu definiert man die Funktion e (wie evaluate) mit … 5 3 8 11 13 e(x) = 1 <==> x D unde(x) = 0 <==> x D D3 Berechnen Sie dazu e(1), e(2), e(3), e(4), e(5), e(6), e(7), e(8) e(1)=0, e(2)=0, e(3)=1, e(4)=0, e(5)=1, e(6)=0, e(7)=0, e(8)=1 1 könnte man auch als W (wahr) und 0 als F (falsch) interpretieren.

  13. Man könnte nun eine Funktion e(int z) implementieren, die feststellt, ob die Zahl z zu D gehört oder nicht.Wie könnte man dies iterativ machen?

  14. Wiederholt werden aus der alten Menge die neuen Elemente berechnet und dieser Menge hinzugefügt. Dies muß hinreichend oft gemacht werden.

  15. Wie kann dies rekursiv realisiert werden …?Beachten Sie dazu folgende Informationen ...

  16. D = {3 ; 5 ; 8 ; 11; 13; ...} 3D und 5D ==> ? Was folgt daraus, d.h. welche Zahl gehört dann auch zu D ?

  17. D = {3 ; 5 ; 8 ; 11; 13; ...} Man sieht sofort: 3D und 5D ==> 3+5D

  18. D = {3 ; 5 ; 8 ; 11; 13; ...} Allgemeiner: rD und sD ==> ? Was folgt daraus, d.h. welche Zahl gehört dann auch zu D ?

  19. D = {3 ; 5 ; 8 ; 11; 13; ...} Allgemeiner: rD und sD ==> r+sD

  20. D = {3 ; 5 ; 8 ; 11; 13; ...} Gilt dies auch umgekehrt ?D.h: r+sD ==> rD und sD Wenn dies nicht gelten sollte, geben Sie bitte ein Gegenbeispiel an.

  21. D = {3 ; 5 ; 8 ; 11; 13; ...} r+sD ==> rD und sD Diese Aussage ist falsch, denn aus 8D folgt NICHT 1D und 7D

  22. D = {3 ; 5 ; 8 ; 11; 13; ...} r+sD ==> rD und sD Kann man diese Aussage so abändern, daß sie korrekt wird ? Bedenken Sie dazu, daß zwar ...

  23. D = {3 ; 5 ; 8 ; 11; 13; ...} 8D ==> 1D und 7D falsch, aber 8D ==> 3D und 5D richtig ist.

  24. 8D <==> 1D  7D  2D  6D  3D  5D  d.h. in mindestens einer Zerlegung müssen alle 2 Zahlen aus D sein !

  25. 8D <==> 1D  7D  2D  6D  3D  5D  bzw. wenn man die Schreibweise mit e(...) verwendet ...

  26. e(8)=1 <==> e(1)=1  e(7)=1  e(2)=1  e(6)=1  e(3)=1  e(5)=1 oder wenn man statt  und  lieber * und + schreibt:

  27. e(8)=1 <==> e(1)=1 * e(7)=1 + e(2)=1 * e(6)=1 + e(3)=1 * e(5)=1 Wie kann man e(8) aus e(1), ..., e(7) berechnen?e(8)=e(1)+e(2)+...e(7) wäre z.B. nicht korrekt!

  28. e(8) = e(1) * e(7) + e(2) * e(6) + e(3) * e(5) 0 0 1 0 0 1 1 Welchen Wert haben e(1), ..., e(7) und wie berechnet man daraus e(8) ?

  29. e(8) = e(1) * e(7) + e(2) * e(6) + e(3) * e(5) 0 0 1 0 0 1 1 e(8) wird rekursiv, d.h. durch die Verwendung von "vorigen" Werten e(1), ..., e(7) berechnet.

  30. Die dahinter stehende Struktur kann man anschaulich durch einen sogenannten UND-ODER-Baum darstellen. Dies ist ein Baum, in dem UND-Gatter und ODER-Gatter vorkommen, also folgende Form haben:

  31. ..................................... usw. ..................................................... blaue Gebilde : ODER-Gatter rote Gebilde : UND-Gatter

  32. 0 e(7) 0 0 0 0 0 0 e(6) e(4) e(2) e(5) e(1) e(3) 0 1 1 0 0 0 0 e(4) e(3) e(1) e(5) e(1) e(2) 0 1 0 0 0 0 jetzt wird von den grünen Blättern ausgehend nach oben hin der Baum ausgwertet. e(3) e(1) 0 1

  33. Dies kann man auch etwas mathematischer darstellen:

  34. e(8) =  e(x1) * e(x2) {x1,x2}K(8)wobei K(x) die zu x gehörende Kandidatenmenge ist.K(8) = { {1, 7}, {2, 6}, {3, 5} }

  35. Weitere rekursive Berechnungen?

  36. e(5) = ? Wie berechnet man aber e(5) rekursiv, d.h. kann e(5) durch Verwendung von e(1), ..., e(4) berechnet werden ?

  37. Nein, denn 5wird direkt aus der leeren Menge produziert Also ist e(5) = 1

  38. e(2) = ? Wie berechnet man aber e(2) rekursiv, d.h. kann e(2) durch Verwendung von e(1) berechnet werden ?

  39. Nein, denn 2 kann nicht als Summe zweier verschiedener Zahlen ≥1 dargestellt werden. Da 2 auch nicht aus der leeren Menge produziert wird, gilt e(2) = 0

  40. Rekursive Berechnung von e(7) Aus welchen Elementen aus D könnte die 7 theoretisch produziert worden sein?

  41. 7 e(7)= 0*0+0*1+1*0 0 2, 5 1, 6 3, 4 0 e(6)= 0*1+0*0 1 0 1 0 0 e(4)= 0*1 1, 3 2, 4 1, 5 0 1 e(4)= 0*1 1 0 0 0 1, 3 0 1 Wie groß ist jeweils e(b), d.h. welchen Wert haben die roten Blätter ?

  42. Insgesamt ergibt dies die folgende mathematische Formel:

  43. // Kandidatenmenge leer:Fall: K(x) =  ==> e(x) = 0 // x kommt direkt nach dem Urknall:Fall: K(x) ==> e(x) = 1 Fall: sonste(x) =  e(x1) * e(x2) {x1,x2}K(x)

  44. Bevor wir die zugehörige Funktion e(...) implementieren, machen wir noch ein paar Überlegungen ...

  45. Wie kann man die folgende Formel implementieren?e(x) =  e(x1) * e(x2) {x1,x2}K(x) Man kann die zu x gehörige Kandidaten K(x) bestimmen und in ein Feld v eintragen. Für K(15) wäre dies z.B: Was muß dann noch berechnet werden ? e(15)= e(1)*e(14) + e(2)*e(13) + e(3)*e(12) + e(4)*e(11)+ e(5)*e(10) + e(6)*e(9) + e(7)*e(8) Angenommen, die Funktion e(x) würde schon implementiert sein.Implementieren Sie e(1) * e(14) + ... + e(7) * e(8)

  46. ...int sum=0; for(i=1;i<15;i=i+2){ sum = e(i)*e(15-i)+sum; } ...

  47. Annahme: Das Feld v ist sehr groß. Wie könnte man die Laufzeit (Performance) des Programms verbessern ?Beachten Sie dazu Folgendes:

  48. e(1)*e(14) + e(2)*e13) + e(3)*e(12) + e(4)*e(11) + e(5)*e(10) + e(6)*e(9) + e(7)*e(8) Welche Werte können e(1) , ... , e(14) annehmen ? 0 oder 1 Angenommen, man interpretiert den obigen Term als logischen Ausdruck (* als das logische UND und + als das logische ODER). Welchen Wert (Integer-Zahl) hat dann der obige Term, wenn er FALSCH ist ? Welchen Wert (Integer-Zahl) hat dann der obige Term, wenn er WAHR ist ? Wenn er FALSCH ist, dann muß e(1) , ... , e(14) gleich 0 sein, also hat der Term den Wert 0. Wenn er WAHR ist, dann können e(1) , ... , e(14) alle gleich 1 sein, also hat der Term einen Wert zwischen 1 und 7. Kurz: FALSCH entspricht 0WAHR entspricht ≥ 1

  49. Aufgabe: Angenommen, die Funktion e(x) würde schon implementiert sein.Implementieren Sie e(1) * e(14) + ... + e(7) * e(8) unter der Bedingung, daß sich das Laufzeitverhalten verbessert.

  50. int sum=0; for(i=0;i<14;i=i+2){ sum = e(i)*e(15-i); if (sum==1) break; } Wenn sum das 1. Mal den Wert 1 hat, ist der Wahrheitswert W, unabhängig davon, was die nachfolgenden Produkte für Werte haben.

More Related