Математика
Вирішив почати заново, тепер, коли я розумію правила гри (я думаю).
Словник на 10000 слів унікальних випадково складених «слів» (лише малі регістри) довжиною 3. Аналогічним чином були створені й інші словники, що складаються з рядків довжиною 4, 5, 6, 7 та 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
бере на перевірку поточну версію словника. Головне слово поєднується з циклічними варіантами (якщо такі є). Слово та його відповідність додаються до списку вихідних out
даних оброблених слів. Вихідні слова видаляються зі словника.
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
проходить через словник всіх слів.
f[dict_]:=FixedPoint[g,{dict,{}}][[2]]
Приклад 1 : фактичні слова
r = f[{"teaks", "words", "spot", "pots", "sword", "steak", "hand"}]
Length[r]
{{"стейк", "чайок"}, {"рука"}, {"горщики", "пляма"}, {"меч", "слова"}}
4
Приклад 2 : Штучні слова. Словник рядків довжиною 3. По-перше, терміни. Потім кількість циклічних слів.
f[d3]//AbsoluteTiming
Length[%[[2]]]
5402
Тимінг як функція довжини слова . 10000 слів у кожному словнику.
Я не знаю особливо, як інтерпретувати висновки в термінах О. Простими словами, термін приблизно подвоюється від словника трьох символів до словника чотирьох символів. Час від часу збільшується майже незначно від 4 до 8 символів.