Thanks Richard,
So it depends on a number of factors, which makes it a bit harder. I had hoped
for some general rules, like always use repeat for if possible or words are
generally slower that items. But I understand, it depends on more things.
I have some hundred fitness functions, which need to be recalculated many
times. But I think the problem of making Permutations might be illuminating for
me, as this one takes quite long to run (with 10 or more elements to Permutate).
So a good example would be how to make all possible permutations of say 10
different elements (0-9). This gives 3628800 different permutations.
The resulting permutations will be in lines I guess, but what would be the best
way to do this. Using lines, items, chars or any other way as Input?
So the start would be f.i. a list with 10 lines with the ten elements, one in
each line - That is what I am using now.
OR items "0,1,2,3,4,5,6,7,8,9" or chars "0123456789" or another way to
represent 10 elements to make it possible to run the script in minutes, not
hours.
the code I have now for this is follows - lines as input (one line per element)
:
function BC4_PermMech_Lines ToPermutate -- ** ToPermutate :
all the elements to permutate, one per line
put the number of lines of ToPermutate into NumInput
put empty into TempPerms5
-- *** First calc the upper half.
put line 1 of ToPermutate & comma & line 2 of ToPermutate & comma into
TempPerms1
put line 3 to -1 of ToPermutate into tInput3
put 3 into Index
repeat for each line newElement in tInput3
set the cursor to busy
repeat for each line tLine in TempPerms1
repeat with y = Index down to 1 -- repeat with y = x down to
1
put tLine into Temp
put newElement & comma before item y of temp
put Temp & cr after TempPerms5
end repeat
end repeat
delete char -1 of TempPerms5 -- ** last cr
put TempPerms5 into TempPerms1
put empty into TempPerms5
add 1 to Index
end repeat
-- *** Now the second half
-- *** First calc the upper half. Later copy and inverse all (alternative
idea)
put line 2 of ToPermutate & comma & line 1 of ToPermutate & comma into
TempPerms2
put 3 into Index
repeat for each line newElement in tInput3
set the cursor to busy
repeat for each line tLine in TempPerms2
repeat with y = Index down to 1
put tLine into Temp
put newElement & comma before item y of temp
put Temp & cr after TempPerms5
end repeat
end repeat
delete char -1 of TempPerms5 -- last cr
put TempPerms5 into TempPerms2
put empty into TempPerms5
add 1 to Index
end repeat
put cr & TempPerms2 after TempPerms1
choose browse tool
Return TempPerms1
end BC4_PermMech_Lines
-----
Another example I am struggling with is to delete exact duplicate lines in a
long, long list. Do I best use chars, items or words in the lines of the list?
As example can be thought the deletion of duplicate permutations if you start
with 10 elements, but there are duplicate elements in the start, e.g.
0011123456 .
This would give 'only' 302400 permutations, so there are 60480 duplicate perms
to be deleted.
There might be an algorithm, which makes the correct permutations right away
(in the case of duplicate elements), without first making all the general
permutations and then deleting the duplicates.
That would be really great and I'd love to hear it if someone knows an
algorithm for those permutations !!!!
But even so, I am also interested in de fastest way to delete duplicate lines
anyway for other parts of my program.
At the moment I use :
--
function BC2_RemoveDuplicate_Lines pData
repeat for each line rLine in pData
add 1 to TestArray[rLine]
end repeat
return the keys of TestArray
end BC2_RemoveDuplicate_Lines
--
I hope someone knows a faster way :-)
Thanks a lot, Beat
_______________________________________________
use-livecode mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode