MathGroup Archive 2001

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

Search the Archive

SubsetQ challenge


I would like a fast implementation of a function SubsetQ[s1,s2] that
returns True if s1 is a subset of s2, False otherwise.  For simplicity,
assume that s1 and s2 are already sorted and Length[s1] <= Length[s2].  I
have already tried the following:

Complement[s1,s2]=={};
Complement[s1,s2]==={};
Length[Complement[s1,s2]]==0;
Union[s1,s2]==s2;
Union[s1,s2]===s2;
Length[Union[s1,s2]]==Length[s2];
s1==Intersection[s1,s2];
s1===Intersection[s1,s2];
Length[s1]==Length[Intersection[s1,s2]];
And@@(MemberQ[s2,#]&/@ s1);

I have done a few timing tests.  The first nine versions are comparable in
speed, but the tenth version (using MemberQ) takes about twice as long as
the others.

Rob Pratt
Department of Operations Research
The University of North Carolina at Chapel Hill

rpratt at email.unc.edu

http://www.unc.edu/~rpratt/



  • Prev by Date: Re: two y-axis
  • Next by Date: Re: String to Number
  • Previous by thread: Re: Arrows on axes?
  • Next by thread: Fresnel's Reflectivity