Mathematica
Memutuskan untuk memulai lagi, sekarang saya mengerti aturan permainan (saya pikir).
Kamus 10.000 kata dengan "kata-kata" unik yang disusun secara acak (hanya huruf kecil) dengan panjang 3. Dengan cara yang sama, kamus lain dibuat yang terdiri dari string dengan panjang 4, 5, 6, 7, dan 8.
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
mengambil versi kamus saat ini untuk memeriksa. Kata teratas digabungkan dengan varian siklik (jika ada). Kata dan kecocokannya ditambahkan ke daftar output out
,, dari kata-kata yang diproses. Kata-kata keluaran dihapus dari kamus.
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
berjalan melalui semua kata kamus.
f[dict_]:=FixedPoint[g,{dict,{}}][[2]]
Contoh 1 : kata-kata aktual
r = f[{"teaks", "words", "spot", "pots", "sword", "steak", "hand"}]
Length[r]
{{"steak", "teak"}, {"hand"}, {"pots," spot "}, {" sword "," words "}}
4
Contoh 2 : Kata-kata tiruan. Kamus string panjang 3. Pertama, waktu. Kemudian jumlah kata siklus.
f[d3]//AbsoluteTiming
Length[%[[2]]]
5402
Pengaturan waktu sebagai fungsi dari panjang kata . 10000 kata dalam setiap kamus.
Saya tidak terlalu tahu bagaimana menafsirkan temuan dalam hal O. Secara sederhana, waktunya kira-kira dua kali lipat dari kamus tiga karakter ke kamus empat karakter. Penentuan waktunya meningkat hampir secara diabaikan dari 4 hingga 8 karakter.