MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Intersection @ Complement

  • To: mathgroup at smc.vnet.net
  • Subject: [mg58141] Re: Intersection @ Complement
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Mon, 20 Jun 2005 05:21:17 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, England
  • References: <d90tcg$99f$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Zak Seidov wrote:
> Some crazy thing Mmca does with
> Intersection/Complement:
> 
> s1={1,2,5,7,4,4,1};s2={1,6,3,5,7,7,1,6};
> Intersection[s1,s2]
> {1,5,7} (* not {1,1,5,7} ?!*)
> Complement[s1,s2]
> {2,4} (* not {2,4,4} ?!*)
> Complement[s2,s1]
> {3,6} (* not {3,6,6,7} ?!*)
> 
> Interestingly, in both cases Mmca Help
> says that the result is SORTED list,
> while actually it's UNION not SORT that works?!
> And note that in the last case 7 is absent at all ?!
> what d'u think about this? thanks a lot, zak
> 
Hi Zak,

I am afraid that there is nothing crazy at all in Mathematica behavior! 
Mathematica works just has expected with *set* operators such as 
intersection or complement.

We do not have a specific data type for *sets* built-in Mathematica. So 
the only way I am aware of to represent a *set* is to use a list (here I 
might be wrong but the Mathematica gurus in this forum will correct me 
if needed).

So whenever you feed Mathematica with some lists ordered in a specific 
way and containing repeated elements and then use *set* operations such 
as intersection or complement on these lists, Mathematica first 
reorganizes internally these lists as equivalent of *sets*: it orders 
them in lexicographic order (here too I might be wrong about the most 
general cases) and keeps only one occurrence of each elements. Then the 
*set* operation is applied and a list that represents a *set* is returned.

For example, first we create two lists

In[1]:=
lst1 = {1, 2, 5, 7, 4, 4, 1}
lst2 = {1, 6, 3, 5, 7, 7, 1, 6}

Out[1]=
{1, 2, 5, 7, 4, 4, 1}

Out[2]=
{1, 6, 3, 5, 7, 7, 1, 6}

Now we create the "associated" *sets*
In[3]:=
s1 = Union[lst1]
s2 = Union[lst2]

Out[3]=
{1, 2, 4, 5, 7}

Out[4]=
{1, 3, 5, 6, 7}

In[5]:=
Intersection[s1, s2]

Out[5]=
{1, 5, 7}

In[6]:=
Intersection[lst1, lst2]

Out[6]=
{1, 5, 7}

And we can see that both operations yield the same result.

Best regards,
/J.M.


  • Prev by Date: Weird Graphics Behaviour-Mathematica 4.2
  • Next by Date: Re: plot command
  • Previous by thread: Re: Intersection @ Complement
  • Next by thread: plot command