Ich arbeite an einem Problem, bei dem ich prüfen muss, wie viele Wörter in einem Wörterbuch kombiniert werden können, um ein einzelnes Wort zu finden.Wörter in einem Wörterbuch mit einem Wort kombinieren
Zum Beispiel:
die Zeichenfolge gegeben "hellogoodsir", und das Wörterbuch: {Hallo, gut, Sir, gehen, od, e, l}, ist das Ziel, alle möglichen Kombinationen zu finden, Form die Schnur.
In diesem Fall würde das Ergebnis hallo + gut + Sir und hallo sein + go + od + Sir, in resultierenden 3 + 4 = 7 Worten verwendet, oder 1 + 1 = 2 Kombinationen.
Was ich habe, ist einfach, alle Wörter beginnend mit dem ersten Zeichen ("h" in diesem Fall) in einem hashmap (startH) und den Rest in einem anderen hashmap (endH). Ich gehe dann jedes einzelne Wort im startH hashmap durch und überprüfe, ob "hellogoodsir" das neue Wort (start + end) enthält, wobei end jedes Wort im endH hashmap ist. Wenn dies der Fall ist, prüfe ich, ob es mit dem passenden Wort übereinstimmt, und inkrementiere dann den Zähler mit dem Wert der Zahl für jedes verwendete Wort. Wenn es es enthält, aber nicht gleich ist, rufe ich dieselbe Methode (Rekursion) unter Verwendung des neuen Wortes (dh start + end) auf und versuche, irgendein Wort am Ende hashmap an das neue Wort anzuhängen, um a zu erhalten Spiel.
Dies ist offensichtlich sehr langsam für eine große Anzahl von Wörtern (und eine lange Zeichenfolge zu entsprechen). Gibt es einen effizienteren Weg, um dieses Problem zu lösen?
Soweit ich weiß, ist dies ein O (n^2) Algorithmus, aber ich bin mir sicher, dass dies schneller erledigt werden kann.
Ich bin nicht 100% sicher, was Sie vorschlagen, aber es scheint, Sie versuchen, tatsächlich alle "anderen Build" iterieren (d. H. Für jede mögliche Lösung, aktiv zu finden sein Ende in der Struktur). Da es eine exponentielle Anzahl von diesen gibt - dies geschieht in exponentieller Zeit. – amit