|
[Date Index]
[Thread Index]
[Author Index]
Re: List processing
- To: mathgroup at smc.vnet.net
- Subject: [mg37224] Re: List processing
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Thu, 17 Oct 2002 00:08:58 -0400 (EDT)
- References: <aokbp7$afv$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
"John Leary" <leary at paradise.net.nz> wrote in message
news:aokbp7$afv$1 at smc.vnet.net...
.............
> A list contains pairs of values, with each pair representing the lower and
> upper edge of a sub-range. Some of the sub-ranges partially overlap, some
> fully overlap, others don't overlap at all. The problem is to produce a
> second list that contains the overall upper and lower edges of the
> overlapping sub-ranges.
>
> A simple example : {{100,200},{150,250},{120,270},{300,400}} would
result
> in {{100,270},{300,400}}.
John,
Generate a list of pairs:
lst=Table[{#,#+Random[Integer,{0,9}]}&[Random[Integer,{0,1000}]],{1000}];
A slow solution
Sort[lst]//.
{x___,{a_,b_},{c_,d_},y___}/;c<=b:>{x,{a,Max[b,d]},y}//Timing
{5. Second,{{0,219},{221,431},{432,568},{569,599},{600,697},{699,1005}}}
A faster one
FixedPoint[{Min[#],Max[#]}&/@Split[Sort[#], #1[[2]]>=#2[[1]]&]&,
lst]//Timing
{0.22 Second,{{0,219},{221,431},{432,568},{569,599},{600,697},{699,1005}}}
--
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565
Prev by Date:
Re: grouping and averaging {x,y} pairs of data
Next by Date:
Re: List processing
Previous by thread:
RE: List processing
Next by thread:
Re: List processing
|