Hallo liebes Forum,
seit mehreren Tagen überlege ich nun schon an einem guten Lösungsweg und komme auf keinen grünen Zweig.
Mein Problem liegt darin, systematisch Schlüsselwörter aus einem gegebenen Zeichenset und Zeichenlänge mit PHP zu generieren.
Bisher läuft das nach einem Zufallsverfahren und einer Überprüfung, ob das Schlüsselwort vergeben ist oder nicht. Da es aber relativ ineffizient ist und ein weiteres Problem mit sich zieht, möchte ich die Schlüsselwörter mit einem System vergeben.
Immer, wenn ein Datensatz hinzugefügt werden soll, wird ein neues (einzigartiges) Schlüsselwort benötigt. Ist keines übergeben worden, muss sich ein Algorithmus ein Schlüsselwort ausdenken. Gegeben wird dann aber das Zeichenset, das für alle User gleich ist. Aber die Schlüsselwortlänge variiert von Benutzer zu Benutzer.
Angenommen, das Charset ist {A,B,C} und die Länge ist zwei, so sähe eine systematische Vergabe so aus:
AA √
AB √
AC (jetzt diese Kombination zurückgeben)
BA
BB
BC
CA
CB
CC
Damit ich aber nicht jedes Mal beim Hinzufügen erst ein Array dieser Kombinationen erstellen muss (da uU. sehr lahm), möchte ich eine Art Cache einführen.
Ich würde also dann dieses Array abspeichern und die letzte benutze Kombination, um direkt auf die nächste Kombination zugreifen zu können.
Probleme kommen jetzt dabei auf, dass dieser Cache sich natürlich unterscheiden kann, je nach Länge der Schlüsselwörter für den aktuellen Benutzer. Sprich, es wird immer mehrere Caches geben, da sich die Längen unterscheiden. Die Caches müssen neu angelegt werden, wenn sich Länge/Charset ändern.
Eigentlich gar kein Problem, soweit. Umgesetzt habe ich davon aber noch nichts, weil ich eben noch nicht weiß, wie final eine solche Lösung ist. Und um Eure Ratschläge bitte ich hiermit, wenn man die folgenden Probleme betrachtet:
Schlüsselwörter können auch manuell mitgegeben werden. Gebe ich also als Schlüsselwort 'webutterthebreadwithbutter' mit, beträgt die Länge schon 26. Da es das erste Schlüsselwort mit dieser Länge ist, müsste ich beim Hinzufügen den Cache dafür erstellen. Man stelle sich nun vor: Das Charset beinhaltet alle Buchstaben (case-senetive) und Ziffern, hätten wir 62 mögliche 'chars'.
Dass das Erstellen dieses Caches nun 62^26 Kombinationen ergibt, ist dabei natürlich ein Hindernis, was garantiert den RAM auslastet und das Script abbricht. Das passiert leider aber auch schon bei sehr viel kleineren Kombinationen, dass der Arbeitsspeicher schlicht nicht ausreicht.
So kann ich zwar eine Zeichenkette problemlos mit den Kombinationen erzeugen, diese Zeichenkette jedoch in ein Array umwandeln wird nichts. Oder gar in JSON umwandeln.
Warum will ich das nicht mehr nach dem Zufallsprinzip machen? Ganz klar: Schnelleres Hinzufügen ermöglichen, die Länge automatisch inkrementieren, wenn eine freie Kombination mit der Länge verfügbar ist.
Ich glaube kaum, dass die Informationen hier genügen, aber wenn ich noch mehr schreibe wird es nur verwirrender. Wenn Fragen auftauchen, einfach stellen und ich liefere die Infos nach!
Was sollte ich machen? Wie umgeht man diese Probleme?
Liebe Grüße
Jan
(√ soll ein Haken darstellen)
seit mehreren Tagen überlege ich nun schon an einem guten Lösungsweg und komme auf keinen grünen Zweig.
Mein Problem liegt darin, systematisch Schlüsselwörter aus einem gegebenen Zeichenset und Zeichenlänge mit PHP zu generieren.
Bisher läuft das nach einem Zufallsverfahren und einer Überprüfung, ob das Schlüsselwort vergeben ist oder nicht. Da es aber relativ ineffizient ist und ein weiteres Problem mit sich zieht, möchte ich die Schlüsselwörter mit einem System vergeben.
Immer, wenn ein Datensatz hinzugefügt werden soll, wird ein neues (einzigartiges) Schlüsselwort benötigt. Ist keines übergeben worden, muss sich ein Algorithmus ein Schlüsselwort ausdenken. Gegeben wird dann aber das Zeichenset, das für alle User gleich ist. Aber die Schlüsselwortlänge variiert von Benutzer zu Benutzer.
Angenommen, das Charset ist {A,B,C} und die Länge ist zwei, so sähe eine systematische Vergabe so aus:
AA √
AB √
AC (jetzt diese Kombination zurückgeben)
BA
BB
BC
CA
CB
CC
Damit ich aber nicht jedes Mal beim Hinzufügen erst ein Array dieser Kombinationen erstellen muss (da uU. sehr lahm), möchte ich eine Art Cache einführen.
Ich würde also dann dieses Array abspeichern und die letzte benutze Kombination, um direkt auf die nächste Kombination zugreifen zu können.
Probleme kommen jetzt dabei auf, dass dieser Cache sich natürlich unterscheiden kann, je nach Länge der Schlüsselwörter für den aktuellen Benutzer. Sprich, es wird immer mehrere Caches geben, da sich die Längen unterscheiden. Die Caches müssen neu angelegt werden, wenn sich Länge/Charset ändern.
Eigentlich gar kein Problem, soweit. Umgesetzt habe ich davon aber noch nichts, weil ich eben noch nicht weiß, wie final eine solche Lösung ist. Und um Eure Ratschläge bitte ich hiermit, wenn man die folgenden Probleme betrachtet:
Schlüsselwörter können auch manuell mitgegeben werden. Gebe ich also als Schlüsselwort 'webutterthebreadwithbutter' mit, beträgt die Länge schon 26. Da es das erste Schlüsselwort mit dieser Länge ist, müsste ich beim Hinzufügen den Cache dafür erstellen. Man stelle sich nun vor: Das Charset beinhaltet alle Buchstaben (case-senetive) und Ziffern, hätten wir 62 mögliche 'chars'.
Dass das Erstellen dieses Caches nun 62^26 Kombinationen ergibt, ist dabei natürlich ein Hindernis, was garantiert den RAM auslastet und das Script abbricht. Das passiert leider aber auch schon bei sehr viel kleineren Kombinationen, dass der Arbeitsspeicher schlicht nicht ausreicht.
So kann ich zwar eine Zeichenkette problemlos mit den Kombinationen erzeugen, diese Zeichenkette jedoch in ein Array umwandeln wird nichts. Oder gar in JSON umwandeln.
Warum will ich das nicht mehr nach dem Zufallsprinzip machen? Ganz klar: Schnelleres Hinzufügen ermöglichen, die Länge automatisch inkrementieren, wenn eine freie Kombination mit der Länge verfügbar ist.
Ich glaube kaum, dass die Informationen hier genügen, aber wenn ich noch mehr schreibe wird es nur verwirrender. Wenn Fragen auftauchen, einfach stellen und ich liefere die Infos nach!
Was sollte ich machen? Wie umgeht man diese Probleme?
Liebe Grüße
Jan
(√ soll ein Haken darstellen)