มาติกา
ตัดสินใจที่จะเริ่มอีกครั้งตอนนี้ฉันเข้าใจกฎของเกม (ฉันคิดว่า)
พจนานุกรมคำศัพท์ 10,000 คำที่ประกอบด้วย "คำว่า" (เฉพาะตัวพิมพ์เล็ก) ที่มีความยาวไม่เกิน 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]
{{"สเต็ก", "teaks"}, {"hand"}, {"pots", "spot"}, {"ดาบ", "คำ"}}
4
ตัวอย่างที่ 2 : คำประดิษฐ์ พจนานุกรมสตริงที่มีความยาว 3 จากนั้นจำนวนคำวัฏจักร
f[d3]//AbsoluteTiming
Length[%[[2]]]
5402
การจับเวลาเป็นฟังก์ชั่นความยาวของคำ 10,000 คำในแต่ละพจนานุกรม
ฉันไม่รู้วิธีตีความผลการวิจัยในแง่ของ O โดยเฉพาะอย่างยิ่งระยะเวลาประมาณสองเท่าจากพจนานุกรมตัวละครสามตัวถึงพจนานุกรมตัวละครสี่ตัว ระยะเวลาเพิ่มขึ้นเกือบประมาทเลินเล่อจาก 4 ถึง 8 ตัวอักษร