Hi,

some ideas from the top of my head...one obvious way of doing this is using a Dictionary to keep track of occurrences of each number (i.e. scan the input list twice, first constructing the dictionary and next constructing the output list). Another (memory-friendly) is sorting the input list and doing a simple scan ((n*log n) + n). There are bucket-sort-inspired variations on this one that greatly reduce the complexity (that might even outperform the dictionary approach).

HTH,
Filip

I have a list of n numbers than I want to partition into two subsets--the first set contains numbers that only appear in the list one time, the second set contains numbers that appear twice. For example, a list such as {1, 2, 3, 4, 2, 3} would be partitioned into {1, 4} and {2,3}. I could recurse through the list, picking off the first element each time, and adding it to one list the first time it was encountered, and then removing it from the first list and adding it to the second if it is encountered a second time. My question is this:
Is there a more efficient way to partition this list in OZ--
such as using the List partition function, or or one of the "drop..." functions? George Rudolph

_________________________________________________________________________________
mozart-users mailing list                               
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to