permuting a string (was Re: Speed)

Beat Cornaz B.Cornaz at gmx.net
Wed Aug 27 16:15:31 EDT 2014


Alex wrote :

>To make it faster, it *should* be serialized, so that it isn't actually recursive; that should be quite easy (but will make the code much less 
> easy to read or understand, so I haven't done it yet).  If you think  it's worth pursuing, let me know and I'll have a go at unrolling the recursiveness.

Recursive scripts is something I know in principle about, but never have used them before. They are quite compact, but I find it hard to follow, especially as your variables are emptied in each new entry into the script (f.i. t3 in Alex's script).
I tried to unroll it and make it serial, but I am having troubles with it. I think I should start in the opposite direction and work back, but it's too late now for me to solve it. First a little sleep. 
I also tried to serialise Geoff's script, but am running into the same difficulty. I haven't grasped the concept completely I guess.

If you could give me a hint, Alex, I'd be happy.

As for the Duplicates :

Alex wrote :

> permut() is the optimized version - optimize simepl cases of 1 or 2 chars, eliminate duplicates as we go.

Well, it does so, but not completely. First, as I discovered in my own script with eliminating duplicates, it needs the input in the form of the most duplicates in the beginning and then trailing off.
F.i. 111223 would work , but 112223  or 112333 would not return all of the possible (non duplicate) permutations.

Moreover, in the script of Alex, a couple of duplicates slip thru.
F.I. 1123  gives 14 permutations i.s.o. 12. In the list below, the # are the doubles.

1123
1132
1213
1231
1312
1321
2113
2131
2311   #
2311   #
3112
3121
3211   #
3211   #


An advantage of Alex's script and also my own over other scripts is, that these scripts give a better ordaining of the permutations as a result. In a more systematic way, due to the fact how they are constructed of course.

Thanks for all your input, I really appreciate,

Cheers, Beat


More information about the use-livecode mailing list