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
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to