{"id":64287,"date":"2025-02-09T15:28:38","date_gmt":"2025-02-09T14:28:38","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=64287"},"modified":"2025-02-14T14:24:51","modified_gmt":"2025-02-14T13:24:51","slug":"backtracking-das-8-damen-problem-im-video","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2025\/02\/backtracking-das-8-damen-problem-im-video.htm","title":{"rendered":"Backtracking: Das 8-Damen-Problem im Video"},"content":{"rendered":"<div style='text-align:right;'><small>(<a href='https:\/\/www.herr-rau.de\/wordpress\/2025\/02\/backtracking-das-8-damen-problem-im-video.htm#comments'>2 Kommentare.<\/a>)<\/small> <\/div>\n<p>Acht Stunden sieht der Lehrplan f\u00fcr Rekursion vor, acht Stunden, das ist absurd wenig f\u00fcr das, was sich das Schulbuch zumindest anbietet &#8211; Fakult\u00e4t, Palindrom, Fibonacci, Ackermann, gr\u00f6\u00dfter gemeinsamer Teiler, Hanoi, selbst\u00e4hnliche Kurven (Sierpinksi, Hilbert, Pythagorasbaum, Drachenkurve); Rucksack- und 8-Damen-Problem; Tiefensuche, Tiefensuche-Varianten und Vergleich mit Dijkstra, Breitensuche. Nat\u00fcrlich muss man nicht alles davon machen, aber viel davon auch implementieren. Und Backtracking ist nichts, was leicht f\u00e4llt.<\/p>\n\n\n\n<p>Der Lehrplan, mit seiner unsinnigen Trennung von Kompetenzerwartungen und Inhalten, sieht f\u00fcr diese 8 Stunden zu je 45 Minuten vor:<\/p>\n\n\n\n<p><strong>Kompetenzerwartungen<\/strong><\/p>\n\n\n\n<p>Die Sch\u00fclerinnen und Sch\u00fcler \u2026<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>analysieren rekursive Algorithmen und erl\u00e4utern das Prinzip der Rekursion. Dabei vergleichen sie iterative und rekursive Algorithmen f\u00fcr geeignete Problemstellungen.<\/li>\n\n\n\n<li>implementieren rekursive Algorithmen zur L\u00f6sung von Problemen und Aufgaben, wie z. B. Berechnung des ggT, Erzeugung selbst\u00e4hnlicher Figuren, T\u00fcrme von Hanoi.<\/li>\n\n\n\n<li>erl\u00e4utern die Idee der Tiefensuche in Graphen, formulieren den zugeh\u00f6rigen Algorithmus und wenden diesen an konkreten Beispielen an.<\/li>\n\n\n\n<li>implementieren die Tiefensuche in Graphen und modifizieren den Algorithmus in geeigneter, vom Anwendungskontext abh\u00e4ngiger Weise, z. B. bei der Auswahl oder Bearbeitung aller erreichbaren Knoten mit bestimmten Eigenschaften. <\/li>\n<\/ul>\n\n\n\n<p><strong>Inhalte zu den Kompetenzen:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rekursion: rekursiver Aufruf, Abbruchbedingung, lineare und verzweigte Rekursion<\/li>\n\n\n\n<li>Tiefensuche<\/li>\n<\/ul>\n\n\n\n<p>Nun ja. Ich habe f\u00fcr meinen Kurs versucht, das 8-Damen-Problem zu veranschaulichen:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"466\" style=\"aspect-ratio: 1280 \/ 466;\" width=\"1280\" controls src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/Backtracking-8-Damen-klein.mp4\"><\/video><\/figure>\n\n\n\n<p>In Java w\u00e4re das:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void loesungsmethode(int spalte) {  \n    for (int zeile=0; zeile&lt;8; zeile++) {\n        if ( feldIstMoeglich(zeile, spalte) ) {\n            setzeDame(zeile, spalte);\n            if (spalte==7) druckeSchachbrettAus();\n            else loesungsmethode(spalte+1);                    \n            entferneDame(zeile, spalte);\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p>Gestartet wird das mit dem Aufrufen von <code>loesungsmethode(0)<\/code> f\u00fcr die erste Spalte. Wenn das Ergebnis gefunden ist, muss man es ausgeben, weil bei diesem Vorgehen ja nach und nach alle je gesetzten Damen wieder entfernt werden. (Man kann es auch schwieriger machen, siehe Schulbuch. Die Methoden <code>setzeDame<\/code> und <code>entferneDame<\/code> erleichtern den Zugriff auf das Schachbrett, das dort als <code>ArrayList&lt;ArrayList&lt;Boolean&gt;&gt;<\/code> modelliert ist. Meine G\u00fcte.)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void setzeDame(int zeile, int spalte) {\n    schachbrett.get(zeile).set(spalte, true);\n }\nvoid entferneDame(int zeile, int spalte) {\n    schachbrett.get(zeile).set(spalte, false);\n}<\/code><\/pre>\n\n\n\n<p>Nachtrag:<\/p>\n\n\n\n<p>Auch sonst bin ich mit dem an sich sehr guten Buch in manchen Punkten doch nicht zufrieden. Der Pseudocode f\u00fcr die rekursive Methode der Tiefensuche lautet:<\/p>\n\n\n\n<p><code>methode KnotenBesuchen(aktuell:GANZZAHL)<br>  besuchteKnoten.Hinzuf\u00fcgem(aktuell)<br>  ...<\/code><\/p>\n\n\n\n<p>Zur bayerischen Unsitte, die Methodenbezeichner mit Gro\u00dfbuchstaben anfangen zu lassen und im Infinitiv zu verfassen (selber bin ich Team &#8222;besucheKnoten&#8220;), sage ich mal nichts. Dass mit GANZZAHL versucht wird, das ganze abstrakt und sprachunabh\u00e4ngig zu halten, verstehe ich. Aber mit der Zeile &#8222;besuchteKnoten.Hinzuf\u00fcgen(aktuell)&#8220; lege ich mich doch schon wieder darauf fest, eine ArrayList&lt;Integer&gt; f\u00fcr die markierten Knoten zu verwenden, und dann auch eine ArrayList&lt;ArrayList&lt;Integer&gt;&gt; f\u00fcr die Adjazenzmatrix zu verwenden, und nicht jeweils Arrays, was f\u00fcr die Sch\u00fcler und Sch\u00fclerinnen sehr viel anschaulicher w\u00e4re. Warum nicht allgemeiner:<\/p>\n\n\n\n<p><code>methode KnotenBesuchen(aktuell:GANZZAHL)<br>  markiereAlsBesucht(aktuell)<br>  ...<\/code><\/p>\n\n\n\n<p>und der Implementierung \u00fcberlassen, wie man den Knoten als besucht markieren will? Die M\u00f6glichkeit, ein Attribut &#8222;besucht&#8220; f\u00fcr jeden Knoten anzulegen, wird immerhin in einer Aufgabe vorgeschlagen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(2 Kommentare.) Acht Stunden sieht der Lehrplan f\u00fcr Rekursion vor, acht Stunden, das ist absurd wenig f\u00fcr das, was sich das Schulbuch zumindest anbietet &#8211; Fakult\u00e4t, Palindrom, Fibonacci, Ackermann, gr\u00f6\u00dfter gemeinsamer Teiler, Hanoi, selbst\u00e4hnliche Kurven (Sierpinksi, Hilbert, Pythagorasbaum, Drachenkurve); Rucksack- und 8-Damen-Problem; Tiefensuche, Tiefensuche-Varianten und Vergleich mit Dijkstra, Breitensuche. Nat\u00fcrlich muss man nicht alles davon [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25],"tags":[227],"class_list":["post-64287","post","type-post","status-publish","format-standard","hentry","category-informatik","tag-informatik"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/64287","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=64287"}],"version-history":[{"count":3,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/64287\/revisions"}],"predecessor-version":[{"id":64327,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/64287\/revisions\/64327"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=64287"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=64287"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=64287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}