Re: Complement replacement

• To: mathgroup at smc.vnet.net
• Subject: [mg58624] Re: Complement replacement
• From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
• Date: Sun, 10 Jul 2005 16:51:46 -0400 (EDT)
• Organization: The Open University, Milton Keynes, England
• References: <daqosi\$6d8\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```konstantpi at mail15.com wrote:
> hi
> in the list:
> pp=Table[Random[Integer, {1, 1000}], {i, 1000}];
> how could i know which numbers from 1 to 1000 does not exist in the
> pp List.
> but without using:
> Complement[Table[i,{i,1000}],pp]
> regards
>
Hello,

I am not sure to understand why you would not like to use such an
efficient function as *Complement* to solve your problem (homework
assignment perhaps?); anyway rather than a functional approach such as

In[1]:=
pp = Table[Random[Integer, {1, 10}], {i, 10}]

Out[1]=
{9, 1, 8, 4, 7, 2, 8, 3, 10, 8}

In[2]:=
Complement[Range[10], pp]

Out[2]=
{5, 6}

you could use a procedural design for instance

In[3]:=
res = {};
i = 1;
While[i <= Length[pp], j = 1; notInPP = True;
While[j <= Length[pp] && notInPP == True,
If[i == pp[[j]], notInPP = False]; j++; ]*
If[notInPP == True, AppendTo[res, i]]; i++; ]
res

Out[6]=
{5, 6}

Now if you are looking for speed of execution (and also of coding), the
functional approach is definitely better and much much faster. For example,

In[7]:=
pp = Table[Random[Integer, {1, 1000}], {i, 1000}];

In[8]:=
Timing[Complement[Range[Length[pp]], pp]; ]

Out[8]=
{0.*Second, Null}

In[9]:=
Timing[res = {}; i = 1; While[i <= Length[pp],
j = 1; notInPP = True;
While[j <= Length[pp] && notInPP == True,
If[i == pp[[j]], notInPP = False]; j++; ]*
If[notInPP == True, AppendTo[res, i]]; i++; ]*
res; ]

Out[9]=
{4.141*Second, Null}

and here with a code slightly optimized (we sort the list pp and discard
any duplicates before the main loop and also we use the functions *Reap*
and *Sow* rather than *AppendTo*)

In[10]:=
Timing[i = 1; pp = Union[pp];
Reap[While[i <= 1000, j = 1; notInPP = True;
While[j <= Length[pp] && notInPP == True,
If[i == pp[[j]], notInPP = False]; j++; ]*
If[notInPP == True, Sow[i]]; i++; ]]; ]

Out[10]=
{2.8120000000000003*Second, Null}

In[11]:=
\$Version

Out[11]=
"5.1 for Microsoft Windows (January 27, 2005)"

Hope this helps,
/J.M.

```

• Prev by Date: Re: Re: Complement replacement
• Next by Date: Re: Re: Updated my RootSearch package
• Previous by thread: Re: Re: Complement replacement
• Next by thread: Re: Complement replacement