Re: Re: How to select unique elements in a list?
- To: mathgroup at smc.vnet.net
 - Subject: [mg8084] Re: [mg8058] Re: [mg8041] How to select unique elements in a list?
 - From: Allan Hayes <hay at haystack.demon.co.uk>
 - Date: Tue, 5 Aug 1997 03:22:54 -0400
 - Sender: owner-wri-mathgroup at wolfram.com
 
Begin forwarded message:
"w.meeussen" <meeussen.vdmcc at vandemoortele.be>
in [mg8058] Re: [mg8041] Re: [mg7953] How to select unique elements  
in a list?
writes as below ******
Wouter:
There is almost always some possibility for speed up.
Here is another method  - following Fred Simons' idea - and the timings
(a1 = DeleteCases[List@@Times@@test,_Power]);//Timing (*Fred*)
	{1.40619 Second,Null}
(a2 = DeleteCases[List@@Plus@@test,_Times]);//Timing (*variant*)
	{0.421875 Second,Null}
(a3 =Join@@Cases[Split[Sort[test]],{_}]);//Timing (*several  
postings used Split and Sort*)
	{0.390667 Second,Null}
Check
a1==a2 ==a3
	True
	
There is, of course a problem with the use of Times and Plus - they  
depend on not having conversions like 2 *3 to 6 and 2+3 to 5 for  
the given test.
This could be worked around by using k/@test.
Allan
Allan Hayes
hay at haystack.demon.co.uk
http://www.haystack.demon.co.uk/training.html
voice:+44 (0)116 2714198
fax: +44 (0)116 2718642
Leicester,  UK
****************
Begin forwarded message:
From: "w.meeussen" <meeussen.vdmcc at vandemoortele.be>
To: mathgroup at smc.vnet.net
Subject: [mg8084] [mg8058] Re: [mg8041] Re: [mg7953] How to select unique  
elements in a list?
at this point it starts to get generally interesting beyond the  
original scope:
how are we (users) to get a feeling for efficiency of operations,  
given that
a Times[sequence_of_args] evaluates sooo much faster than a
List[sequence_of_args]?
By any measure, List feels more 'basic' than Times, not being commutative
and all.
Can we ever be shure that noone will come up with a gimmick that  
increases
the speed even further?
Amazed,
as always,
wouter.
At 22:32 2-08-97 -0400, Fred Simons wrote:
>Carl Woll came with the following solution of his problem:
>
>Distinct[a_]	:= Select[Union[a],Count[a,#]===1&]
>
>Here is another solution, a short and (for me) amusing oneliner:
>
>Distinct2 = List @@ DeleteCases[ Times @@ #, _Power ]&
>
>It is also faster:
>
>test	= Table[i[Random[Integer,1000]],{1000}];
>
>In[9] := Distinct[test]; // Timing
>
>Out[10] = {12.5586 Second,Null}
>
>In[11] := Distinct2[test]; // Timing
>
>Out[11] = {1.43735 Second, Null}
>
>Fred Simons
>Eindhoven University of Technology
>
>
>
>
Dr. Wouter L. J. MEEUSSEN
eu000949 at pophost.eunet.be
w.meeussen.vdmcc at vandemoortele.be