Mathematica
Tekrar başlamaya karar verdim, şimdi oyunun kurallarını anlıyorum (sanırım).
Uzunluk 3'ün benzersiz rasgele oluşturulmuş "kelimeleri" (sadece küçük harf) olan 10000 kelimelik bir sözlük. Benzer şekilde, 4, 5, 6, 7 ve 8 uzunluklu dizelerden oluşan diğer sözlükler de oluşturulmuştur.
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
kontrol etmek için sözlüğün geçerli sürümünü alır. En üstteki kelime döngüsel varyantlarla (varsa) birleştirilir. Sözcük ve eşleşmeleri, out
işlenen sözcüklerin çıktı listesine eklenir . Çıktı sözcükleri sözlükten kaldırılır.
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
tüm kelimeler sözlüğü üzerinden çalışır.
f[dict_]:=FixedPoint[g,{dict,{}}][[2]]
Örnek 1 : Gerçek kelimeler
r = f[{"teaks", "words", "spot", "pots", "sword", "steak", "hand"}]
Length[r]
{{"steak", "teaks"}, {"el"}, {"tencere", "spot"}, {"kılıç", "kelimeler"}}
4
Örnek 2 : Yapay kelimeler. Uzunluk dizeleri sözlüğü 3. İlk olarak, zamanlama. Sonra döngü kelimelerinin sayısı.
f[d3]//AbsoluteTiming
Length[%[[2]]]
5402
Kelime uzunluğunun bir fonksiyonu olarak zamanlamalar . Her sözlükte 10000 kelime.
Bulguları O açısından nasıl yorumlayacağımı özellikle bilmiyorum. Basit bir ifadeyle, zamanlama kabaca üç karakter sözlüğünden dört karakter sözlüğüne iki katına çıkar. Zamanlama 4 ile 8 karakter arasında neredeyse göz ardı edilebilir.