<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Algorithmus zum Finden aller Wörter bei &amp;quot;Boggle&amp;quot; - Verbesserungsvorschläge?]]></title><description><![CDATA[<p>Schönen Tag miteinander, liebe C++-Freunde!</p>
<p>Ich war jetzt bestimmt seit mindestens 2 Jahren nicht mehr hier und habe vor wenigen Tagen das erste mal seit langem wieder einen C++-Compiler angerührt, was für ein Gefühl! Wie es dazu kam? Nun, ich habe mit einem Freund das uralte Denkspiel &quot;Boggle&quot; im Keller ausgegraben und eine Weile gespielt, nach einer Weile wurde es uns zu langweilig und er meinte plötzlich: &quot;Hey, in dieser Kombination steckt bestimmt ein langes Wort drin, wir sehen es nur nicht -- lass uns doch ein Programm schreiben, das einem alle Lösungsworte ausspuckt!&quot;<br />
Gut - gesagt, getan. Da unser Informatik-Studium ohnehin in ~2 Monaten beginnt dürfte das schon mal eine gute, herausfordernde Übung sein.</p>
<p>Zur Erklärung für diejenigen unter euch die denen das Spiel nicht bekannt ist: Das &quot;Spielfeld&quot; besteht aus einem 4x4-Raster in dem sich Buchstabenwürfel befinden. Durch Schütteln erscheint jeweils eine neue Kombination von Buchstaben und die Aufgabe der Spieler ist es, möglichst schnell möglichst viele Wörter daraus zu bilden. Je länger die Wörter, desto mehr Punkte gibt es.<br />
Wichtig ist dabei, dass der selbe Würfel in einem Wort nicht öfters verwendet werden darf.<br />
So schaut das Feld z.B. aus: <a href="http://www.t-hunts.com/yaba5/images/boggle_9.gif" rel="nofollow">http://www.t-hunts.com/yaba5/images/boggle_9.gif</a></p>
<p>... Nachdem wir zunächst mal festgestellt haben, dass es nicht sonderlich intelligent ist, einfach draufloszuschreiben, ohne irgendeine Ahnung zu haben, wie denn der Algorithmus aussehen soll, haben wir uns hingesetzt und mit Bleistift und Papier überlegt, wie sowas am besten anzupacken ist.</p>
<p>Folgende Lösung, die Rekursion benutzt (anders geht es wohl kaum):<br />
[<em>word</em> bezeichnet das Wort, das der aktuelle Buchstabenpfad ergibt<br />
<em>pdic</em> ist der Wörterbuchzeiger]<br />
[<em>] 1. pdic zu erstem Wort hinzeigen lassen, das mit word beginnt<br />
[</em>] 2. Keines gefunden? -&gt; Abbrechen! (return;)<br />
[*] 3. <em>pdic == word? -&gt; Wenn ja, der Liste der gefundenen Wörter hinzufügen!<br />
[</em>] 4. alle umgebenden Buchstaben ermitteln und die Funktion für jeden einzelnen wieder selbst aufrufen</p>
<p>Klingt jetzt vl etwas kompliziert, aber hier mal die Links zum Code:<br />
<a href="http://rafb.net/p/1Om5eM50.html" rel="nofollow">http://rafb.net/p/1Om5eM50.html</a> - Voggle.h<br />
<a href="http://rafb.net/p/d1bqIM17.html" rel="nofollow">http://rafb.net/p/d1bqIM17.html</a> - Voggle.cpp</p>
<p>Ich hoffe der Code ist soweit verständlich, wenn nicht, dann fragt einfach.<br />
Ich bin mir sicher, dass hier noch sehr viel optimiert werden kann!</p>
<p>Schöne Grüße,<br />
walker</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188439/algorithmus-zum-finden-aller-wörter-bei-quot-boggle-quot-verbesserungsvorschläge</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 03:12:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188439.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 31 Jul 2007 12:51:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Algorithmus zum Finden aller Wörter bei &amp;quot;Boggle&amp;quot; - Verbesserungsvorschläge? on Tue, 31 Jul 2007 12:51:00 GMT]]></title><description><![CDATA[<p>Schönen Tag miteinander, liebe C++-Freunde!</p>
<p>Ich war jetzt bestimmt seit mindestens 2 Jahren nicht mehr hier und habe vor wenigen Tagen das erste mal seit langem wieder einen C++-Compiler angerührt, was für ein Gefühl! Wie es dazu kam? Nun, ich habe mit einem Freund das uralte Denkspiel &quot;Boggle&quot; im Keller ausgegraben und eine Weile gespielt, nach einer Weile wurde es uns zu langweilig und er meinte plötzlich: &quot;Hey, in dieser Kombination steckt bestimmt ein langes Wort drin, wir sehen es nur nicht -- lass uns doch ein Programm schreiben, das einem alle Lösungsworte ausspuckt!&quot;<br />
Gut - gesagt, getan. Da unser Informatik-Studium ohnehin in ~2 Monaten beginnt dürfte das schon mal eine gute, herausfordernde Übung sein.</p>
<p>Zur Erklärung für diejenigen unter euch die denen das Spiel nicht bekannt ist: Das &quot;Spielfeld&quot; besteht aus einem 4x4-Raster in dem sich Buchstabenwürfel befinden. Durch Schütteln erscheint jeweils eine neue Kombination von Buchstaben und die Aufgabe der Spieler ist es, möglichst schnell möglichst viele Wörter daraus zu bilden. Je länger die Wörter, desto mehr Punkte gibt es.<br />
Wichtig ist dabei, dass der selbe Würfel in einem Wort nicht öfters verwendet werden darf.<br />
So schaut das Feld z.B. aus: <a href="http://www.t-hunts.com/yaba5/images/boggle_9.gif" rel="nofollow">http://www.t-hunts.com/yaba5/images/boggle_9.gif</a></p>
<p>... Nachdem wir zunächst mal festgestellt haben, dass es nicht sonderlich intelligent ist, einfach draufloszuschreiben, ohne irgendeine Ahnung zu haben, wie denn der Algorithmus aussehen soll, haben wir uns hingesetzt und mit Bleistift und Papier überlegt, wie sowas am besten anzupacken ist.</p>
<p>Folgende Lösung, die Rekursion benutzt (anders geht es wohl kaum):<br />
[<em>word</em> bezeichnet das Wort, das der aktuelle Buchstabenpfad ergibt<br />
<em>pdic</em> ist der Wörterbuchzeiger]<br />
[<em>] 1. pdic zu erstem Wort hinzeigen lassen, das mit word beginnt<br />
[</em>] 2. Keines gefunden? -&gt; Abbrechen! (return;)<br />
[*] 3. <em>pdic == word? -&gt; Wenn ja, der Liste der gefundenen Wörter hinzufügen!<br />
[</em>] 4. alle umgebenden Buchstaben ermitteln und die Funktion für jeden einzelnen wieder selbst aufrufen</p>
<p>Klingt jetzt vl etwas kompliziert, aber hier mal die Links zum Code:<br />
<a href="http://rafb.net/p/1Om5eM50.html" rel="nofollow">http://rafb.net/p/1Om5eM50.html</a> - Voggle.h<br />
<a href="http://rafb.net/p/d1bqIM17.html" rel="nofollow">http://rafb.net/p/d1bqIM17.html</a> - Voggle.cpp</p>
<p>Ich hoffe der Code ist soweit verständlich, wenn nicht, dann fragt einfach.<br />
Ich bin mir sicher, dass hier noch sehr viel optimiert werden kann!</p>
<p>Schöne Grüße,<br />
walker</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1335705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1335705</guid><dc:creator><![CDATA[walker]]></dc:creator><pubDate>Tue, 31 Jul 2007 12:51:00 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus zum Finden aller Wörter bei &amp;quot;Boggle&amp;quot; - Verbesserungsvorschläge? on Tue, 31 Jul 2007 13:03:56 GMT]]></title><description><![CDATA[<p>Woher habt ihr die Wörter zum Vergleichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1335724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1335724</guid><dc:creator><![CDATA[frage..]]></dc:creator><pubDate>Tue, 31 Jul 2007 13:03:56 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus zum Finden aller Wörter bei &amp;quot;Boggle&amp;quot; - Verbesserungsvorschläge? on Tue, 31 Jul 2007 13:08:54 GMT]]></title><description><![CDATA[<p>Hast Du auch ne Frage?</p>
<p>Ich hab jedenfalls eine: Kann man die Wörter beliebig bilden? Euer Ansatz sieht irgendwie so aus, als müsse das Wort einen Pfad im 4x4-Block bilden. Davon steht aber in der Aufgabenstellung nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1335732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1335732</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Tue, 31 Jul 2007 13:08:54 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus zum Finden aller Wörter bei &amp;quot;Boggle&amp;quot; - Verbesserungsvorschläge? on Tue, 31 Jul 2007 13:48:54 GMT]]></title><description><![CDATA[<p>Eine extreme Optimierungsmöglichkeit fällt mir sofort ein:<br />
Das Wörterbuch sollte nicht direkt benutzt werden, sonder ein daraus erzeugten Deterministischer endlicher Automat (DEA). Spätestens wenn euer Wörterbuch tausende Wörter beinhaltet ist eine direkte Verwendung nicht mehr sinnvoll durchführbar.</p>
<p>Ich wünsche euch viel Spaß beim programmieren!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1335800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1335800</guid><dc:creator><![CDATA[BerndD]]></dc:creator><pubDate>Tue, 31 Jul 2007 13:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus zum Finden aller Wörter bei &amp;quot;Boggle&amp;quot; - Verbesserungsvorschläge? on Tue, 31 Jul 2007 14:14:58 GMT]]></title><description><![CDATA[<p>frage.. schrieb:</p>
<blockquote>
<p>Woher habt ihr die Wörter zum Vergleichen?</p>
</blockquote>
<p>Wir haben folgendes Paket unter Debian/Ubuntu installiert und die Dictionary-Datei einfach eingelesen, wie man ja am Beginn der main()-Funktion sieht;</p>
<pre><code>wngerman - New German orthography wordlist
</code></pre>
<p>Jester schrieb:</p>
<blockquote>
<p>Hast Du auch ne Frage?</p>
</blockquote>
<p>Sorry... die Frage stand eher im Threadtitel -&gt; &quot;Verbesserungsvorschläge?&quot;<br />
Das Programm funktioniert nämlich ohne Probleme und findet alle Wörter, nur habe ich das Gefühl dass das noch viel viel schneller gehen kann (was hätte man denn da früher nur gemacht, mit einem Zehntel der jetzigen Rechenleistung? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ). Auf einem ~1,5GHz Prozessor benötigt es durchschnittlich zwischen 1 und 2 Minuten, um alle Ergebnisse zu berechnen.<br />
Eine simple Optimierung war es, als Container für die Wörterbuchdateien <em>list</em> statt <em>vector</em> zu verwenden, hat schon einiges gebracht.<br />
Aber die Experten unter euch haben sicher noch bessere Vorschläge auf Lager, nicht?</p>
<p>Jester schrieb:</p>
<blockquote>
<p>Ich hab jedenfalls eine: Kann man die Wörter beliebig bilden? Euer Ansatz sieht irgendwie so aus, als müsse das Wort einen Pfad im 4x4-Block bilden. Davon steht aber in der Aufgabenstellung nichts.</p>
</blockquote>
<p>Hast recht, habe ich bei der Spielbeschreibung vergessen; ja, die verwendeten Buchstabenwürfel müssen jeweils zusammenhängen!</p>
<p>BerndD schrieb:</p>
<blockquote>
<p>Das Wörterbuch sollte nicht direkt benutzt werden, sonder ein daraus erzeugten Deterministischer endlicher Automat (DEA).</p>
</blockquote>
<p>Klingt schon mal interessant, werd mal schaun ob ich Informationen hierfür finde, vielen Dank.</p>
<p>Schöne Grüße,<br />
walker</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1335841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1335841</guid><dc:creator><![CDATA[walker]]></dc:creator><pubDate>Tue, 31 Jul 2007 14:14:58 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus zum Finden aller Wörter bei &amp;quot;Boggle&amp;quot; - Verbesserungsvorschläge? on Wed, 01 Aug 2007 05:29:15 GMT]]></title><description><![CDATA[<p>Falls du Besitzer eines Mehrkernprozessors bist, könntest du dir mal überlegen, das Programm zu parallelisieren. Backtracking lässt sich ja relativ einfach auf mehrere Ausführungseinheiten verteilen.</p>
<p>Auf einem System mit mehreren Kernen und/oder CPUs könntest du damit viel Geschwindigkeit holen.</p>
<p>gruß<br />
Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336231</guid><dc:creator><![CDATA[mad_martin]]></dc:creator><pubDate>Wed, 01 Aug 2007 05:29:15 GMT</pubDate></item></channel></rss>