Mathematica
Beschlossen, wieder von vorne zu beginnen, jetzt, wo ich die Spielregeln verstehe (glaube ich).
Ein 10000-Wörter-Wörterbuch mit eindeutigen zufällig zusammengesetzten "Wörtern" (nur Kleinbuchstaben) der Länge 3. In ähnlicher Weise wurden andere Wörterbücher erstellt, die aus Zeichenfolgen der Länge 4, 5, 6, 7 und 8 bestehen.
ClearAll[dictionary]
dictionary[chars_,nWords_]:=DeleteDuplicates[Table[FromCharacterCode@RandomInteger[{97,122},
chars],{nWords}]];
n=16000;
d3=Take[dictionary[3,n],10^4];
d4=Take[dictionary[4,n],10^4];
d5=Take[dictionary[5,n],10^4];
d6=Take[dictionary[6,n],10^4];
d7=Take[dictionary[7,n],10^4];
d8=Take[dictionary[8,n],10^4];
g
nimmt die aktuelle Version des Wörterbuchs zur Überprüfung. Das oberste Wort wird mit zyklischen Varianten verbunden (falls vorhanden). Das Wort und seine Übereinstimmungen werden an die Ausgabeliste out
der verarbeiteten Wörter angehängt . Die Ausgabewörter werden aus dem Wörterbuch entfernt.
g[{wds_,out_}] :=
If[wds=={},{wds,out},
Module[{s=wds[[1]],t,c},
t=Table[StringRotateLeft[s, k], {k, StringLength[s]}];
c=Intersection[wds,t];
{Complement[wds,t],Append[out,c]}]]
f
läuft durch alle Wörter Wörterbuch.
f[dict_]:=FixedPoint[g,{dict,{}}][[2]]
Beispiel 1 : tatsächliche Wörter
r = f[{"teaks", "words", "spot", "pots", "sword", "steak", "hand"}]
Length[r]
{{"Steak", "Teaks"}, {"Hand"}, {"Töpfe", "Fleck"}, {"Schwert", "Wörter"}}
4
Beispiel 2 : Künstliche Wörter. Wörterbuch der Zeichenketten der Länge 3. Zuerst das Timing. Dann die Anzahl der Zykluswörter.
f[d3]//AbsoluteTiming
Length[%[[2]]]
5402
Timings als Funktion der Wortlänge . 10000 Wörter in jedem Wörterbuch.
Ich weiß nicht besonders, wie ich die Ergebnisse in Bezug auf O interpretieren soll. In einfachen Worten, das Timing verdoppelt sich ungefähr vom Drei-Zeichen-Wörterbuch zum Vier-Zeichen-Wörterbuch. Das Timing erhöht sich fast vernachlässigbar von 4 auf 8 Zeichen.