Re: Why Return[] does not work?
- To: mathgroup at smc.vnet.net
- Subject: [mg109486] Re: Why Return[] does not work?
- From: "M.Roellig" <markus.roellig at googlemail.com>
- Date: Thu, 29 Apr 2010 02:54:00 -0400 (EDT)
- References: <hr6ihp$2f8$1@smc.vnet.net> <hr8isl$55h$1@smc.vnet.net>
On 28 Apr., 13:00, Dims <dim... at hotmail.com> wrote:
> On 28 =D0=B0=D0=BF=D1=80, 09:59, "M.Roellig" <markus.roel... at googlemail.com>
> > wrote:
> > In[2]:= Intersection[{a, b}, {c, a}] =!= {}
>
> But would Mathematica optimize evaluation of this expression, i.e.,
> terminate searching for common elements if one already found?
No,
it returns all common elements. But it is very fast. The Do approach
scales terribly with the length of the list (N^2) and the position of
the first intersecting element. Here is an example timing for two lists of
length 10000
RandomSeed[123456789];
AbsoluteTiming@Table[Module[{listA, listB},
listA =
Insert[RandomReal[{1, 1000}, 10000], 3333,
RandomInteger[{1, 10000}]];
listB =
Insert[RandomReal[{1001, 2000}, 10000], 3333,
RandomInteger[{1, 10000}]];
intersects[listA, listB]], {10}]
{537.7829457, {True, True, True, True, True, True, True, True, True,
True}}
The same with the built in command is almost instantaneous
RandomSeed[123456789];
AbsoluteTiming@Table[Module[{listA, listB},
listA =
Insert[RandomReal[{1, 1000}, 10000], 3333,
RandomInteger[{1, 10000}]];
listB =
Insert[RandomReal[{1001, 2000}, 10000], 3333,
RandomInteger[{1, 10000}]];
Intersection[listA, listB] =!= {}], {10}]
{0.2028004, {True, True, True, True, True, True, True, True, True,
True}}
Markus