Mathematica Asked by Nico A on September 24, 2020
I have a list of lists of numbers:
{{5,2,1},{8,1,3},{6,1,1,1},{8,1,3},{6,1,1,1},{8,1,3}}
As you can see, they eventually cycle, but not immediately. I need a function that will take a list of lists of numbers like this and return the cycle length (in this case $2$), and I need it to be as fast as possible.
The naive way is to take the first element that appears more than once, find it’s first two positions in the list and subtract them:
findCycle[list_] := (tbl =
Flatten[Position[list, Select[list, (Count[list, #] > 1 &)][[1]]]];
tbl[[2]] - tbl[[1]])
But this is slower than I’d like, and it errors when there is not a cycle. I’ll be running this on ~25000 lists of 500 items.
Just for tip:
data = ContinuedFraction[(Sqrt[12] + 2)/7, 10004];
Timing[[email protected]@FindTransientRepeat[data, 2]]
{0.0624004, 6}
Timing[[email protected]@[email protected][data, [email protected]]]
{0.0156001, 6}
Answered by lesobrod on September 24, 2020
FindTransientRepeat
periodF1 = Length @ Last @ FindTransientRepeat[#, 2]&;
lst = {{5, 2, 1}, {8, 1, 3}, {6, 1, 1, 1}, {8, 1, 3}, {6, 1, 1, 1}, {8, 1, 3}};
periodF1 @ lst
2
Answered by kglr on September 24, 2020
ll = {};
Reap[
Do[
If[MemberQ[ll, i],
Sow[Length[ll] - Flatten[Position[ll, i]] + 1]; Break[],
AppendTo[ll, i]
],
{i, list}
]
][[2]]
We can use Break
to stop loop when duplicate value is found
Answered by XinBae on September 24, 2020
1 Asked on December 18, 2020 by worldterminator
1 Asked on December 18, 2020
1 Asked on December 18, 2020 by sja
1 Asked on December 18, 2020 by user120911
2 Asked on December 18, 2020 by leosenko
equation solving integral equations numerical integration numerics
1 Asked on December 18, 2020 by lyle-ramshaw
1 Asked on December 18, 2020 by christopher-moore
3 Asked on December 18, 2020
1 Asked on December 17, 2020 by disp0sable_h3r0
0 Asked on December 17, 2020 by user75853
1 Asked on December 17, 2020 by david-e-speyer
2 Asked on December 17, 2020 by maggie
2 Asked on December 17, 2020 by vefhug
differential equations finite difference method finite element method nonlinear
0 Asked on December 17, 2020 by somayeh
1 Asked on December 17, 2020 by user75376
0 Asked on December 17, 2020 by bogus
2 Asked on December 16, 2020
Get help from others!
Recent Answers
© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP