MathGroup Archive 1997

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

Search the Archive

Re: lists of pairs

  • To: mathgroup at smc.vnet.net
  • Subject: [mg8511] Re: [mg8486] lists of pairs
  • From: jpk at max.mpae.gwdg.de
  • Date: Thu, 4 Sep 1997 02:20:00 -0400
  • Sender: owner-wri-mathgroup at wolfram.com

> Hi all, I have a problem in discarding duplicates from a list of integer
> pairs, where if pairs of the form {a, b} and {b,a} exist in the list, I
> wish to discard (or select) only one, it doesn't matter which.  The method
> I use below works, but is slow.
> 
-- shnipp shnipp ---

> Suggestions?  It is desired to minimize the time it takes to do this.
> 
> Russell Towle
> Giant Gap Press:  books on California history, digital topographic maps
> P.O. Box 141
> Dutch Flat, California 95714
> ------------------------------
> Voice:  (916) 389-2872
> e-mail:  rustybel at foothill.net
> ------------------------------
> 
> 
> 
Hi Russel,

here is the timing of Your commands, on my machine:

In[15]:=
Timing[
  c=Table[
      Position[edges, x_ /; x == edges[[i]] || x == Reverse[edges[[i]]] ],
     {i,Length[edges]}];
  f=Flatten[Map[Take[#,1]&, Union[c]],2]
 ]

Out[15]=
{1.69 Second,{1,2,3,4,5,7,8,9,10,12,13,14,17,18,19,22,23,24,28,29,32,33,34,38,
    39,43,44,48,49,53}}

And here the timing of my version:
    
In[14]:=
Timing[
  sedges=Sort /@ edges; (* make a sorted copy of edges *)
  dbls={};              (* here we will collect the double pairs *) 
  sedges //. {a___,i_,b___}  /; 
    MemberQ[{a,b},i] :> (
                         AppendTo[dbls,Position[sedges,i]];
                         {a,b}
                        );
  Flatten[First/@ dbls,2]
 ]

Out[14]=
{0.09 Second,{1,2,3,4,5,7,8,9,10,12,13,14,17,18,19,22,23,24,28,29,32,33,34,38,
    39,43,44,48,49,53}}    
    
Hope that speed increasment is ok for You.

Jens    


  • Prev by Date: Re: Mathematica Precision
  • Next by Date: lists of pairs
  • Previous by thread: lists of pairs
  • Next by thread: lists of pairs