UnsameQ implementation
- To: mathgroup at smc.vnet.net
- Subject: [mg8129] UnsameQ implementation
- From: "C. Woll" <carlw at u.washington.edu>
- Date: Tue, 12 Aug 1997 00:55:09 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Hi,
The function UnsameQ gives true if all of its arguments are pairwise
distinct. The following function also gives true if all of its arguments
are pairwise distinct
DistinctQ[a__]:=Length[Union[{a}]]===Length[{a}]
Now, let's consider a test of these two functions.
test = Table[i[Random[Integer,10000]],{10000}];
utest= Union[test];
Applying the above functions yields
UnsameQ@@test//Timing
DistinctQ@@test//Timing
{0. Second, False}
{0.06 Second, False}
UnsameQ@@utest//Timing
DistinctQ@@utest//Timing
{0.4 Second, True}
{0.02 Second, True}
Notice that for utest, DistinctQ is much faster than the built in
function UnsameQ.
For a list which contains duplicates, it's not surprising that UnsameQ is
much faster, since it terminates as soon as a duplicate is found. But why
is UnsameQ so slow when given a list with no duplicates?
Although this isn't a bug, it seems to me that UnsameQ should be
implemented so that it's at least as fast as DistinctQ above. Will this be
looked at in future versions of Mathematica?
Carl Woll
Physics Dept
U of Washington
License L2514-7296