2012-04-11 8 views
2

Ich suche nach einem Algorithmus, der in der Lage ist, ein Array (2D) von Buchstaben zu erstellen, aus dem ich jedes Wort einer gegebenen Liste extrahieren könnte. Wie in Scrabble können Wörter einander kreuzen und horizontal, vertikal oder diagonal sein. Natürlich gibt es einige offensichtliche Lösungen, aber das Ziel ist es, es so klein wie möglich zu machen, was auch bedeutet, die Anzahl der Überfahrten zu maximieren.kleinste "scrabble board", die jedes Wort einer Liste enthält

Ich habe über eine maschinelle Lernmethode nachgedacht, die eine große Anzahl von Scrabble-Grids verwendet, die entweder von Menschen oder Computern erstellt wurden, aber ich bin sicher, dass es eine sauberere Methode gibt.

Danke für Ihre Hilfe.

PS: Das ist für ein Kunstprojekt, kein Scherz.

+1

Das Finden der minimalen Lösung wird extrem schwierig sein. Können Sie sich nicht einfach für eine gute Lösung entscheiden, anstatt für eine optimale Lösung? In Bezug auf "was auch bedeutet, die Zahl der Kreuzung zu maximieren": Dies ist keine wahre Aussage. Die Maximierung der Anzahl von Kreuzungen ist ein sehr ähnliches Problem, aber das optimale Ergebnis für diese beiden Probleme wird in vielen Fällen unterschiedlich sein. –

+0

Danke Leute, und tut mir leid, dass ich nicht genau genug bin. Eine gute Lösung wäre genug, denn das absolut Optimale zu finden wäre die Hölle. Außerdem, danke für die Hervorhebung, dass es nicht das selbe Problem wie das Optimieren der Kreuzung ist. Ich stimme völlig zu, ich meinte, "diese Probleme scheinen eng zu sein". –

+1

(Scoring) Wörter in Scrabble sind nicht diagonal. –

Antwort

0

Das wäre ziemlich ein Algorithmus. Ich vermute, dass die Lösung eine Art Rekursion beinhaltet.

Angenommen, Sie haben ein Gitter G0, mit dem alle Quadrate leer sind, und dass f (G0) das optimierte abgeschlossene Gitter ist.

Dann würde ich versuchen:

Für jede mögliche Position des ersten Wortes - Satz G1 = das Gitter mit diesem Wort in dieser Position und alle anderen Plätze leer - arbeiten G1 aus zur nächsten Position Gehen Sie weiter

Um G1 auszuarbeiten, könnten Sie f (G1) rekursiv aufrufen.

Wenn Sie ein großes Gitter und viele Wörter hätten, würde dies ewig dauern, da es ein verschwenderischer Algorithmus ist, aber mit einem typischen Scrabble-Board sollte ich denken, es wäre schnell genug auf einem Laptop.