Hallo PrinceMaisle,
ein kartesisches Produkt einer Tabelle mit sich selbst wächst nun mal quadratisch mit der Anzahl der Einträge in der Tabelle.
Es scheint, als wolltest Du im brute force Verfahren irgendeine Kombination von zwei Wörtern erraten, von denen Du nur den Hash kennst.
Ich sehe da ebenfalls keinen Optimierungsansatz außer
- flottere Hardware
- Aufteilen der Aufgabe auf N Prozesse, von denen jeder 1/N der Wörter mit der kompletten Wörterliste kombiniert. Das steuerst Du über die Start- und Endwerte einer der beiden Schleifen. Bei 100 Wörtern und 5 Prozessen würde bspw. die äußere Schleife im Prozess 1 von 0-19 laufen, im Prozess 2 von 20-29, ... im Prozess 5 von 80-99.
count($baselist) in eine Variable zu legen bringt minimal etwas, diese Funktion zählt nicht wirklich sondern fragt ein internes Attribut des Array-Objekts ab.
FALLS die Kombination eines Wortes mit sich selbst außer Frage steht, könntest Du vor dem Bilden des Hashes noch prüfen, ob $wort1 != $wort2 ist und Dir das Hashen ersparen.
Aber Du kommst mit all dem nicht drumherum, dass der Vorgang quadratische Komplexität hat.
Das Script bricht aber nur dann ab, wenn es auf einem Webserver läuft. Führst Du es lokal auf deinem eigenen PC aus, gibt es keine Laufzeitbegrenzung (oder Du kannst sie in der php.ini entfernen).
Wenn Du auf einen Webserver angewiesen bist, kannst Du Zeitscheiben bilden, analog zu der "N Prozesse" Idee. Du übergibst dem Script per Parameter, welchen Ausschnitt der Wortliste die äußere Schleife abfahren soll. Wenn Du 100000 Wörter hast und die äußere Schleife pro Durchlauf immer nur 20 Wörter packt, na gut, dann rufst Du das Ding halt 5000 mal mit entsprechenden Parametern auf. Je nach Power des Webservers musst Du noch dafür sorgen, dass nicht zu viele Aufrufe parallel erfolgen.
Auf einem Web bei einem Shared Hoster würde ich das aber lassen, denn der dürfte Dir dann recht zügig die Leistung drosseln oder Dich rausschmeißen.
Es ist aber kein Problem, ein Kommandozeilen-PHP auf einem Windows- oder Linux PC zum Laufen zu bringen. Auf einem Raspi sollte man das aber nicht probieren - nicht weil der kein PHP lernen könnte, sondern weil der für den Job zu lahm ist.
Rolf
sumpsi - posui - obstruxi