Re: recode procedural algorithm to faster functional module
- To: mathgroup at smc.vnet.net
- Subject: [mg44169] Re: recode procedural algorithm to faster functional module
- From: Dr Bob <drbob at bigfoot.com>
- Date: Sat, 25 Oct 2003 06:26:19 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Here's a simple answer (not necessarily the fastest): overlapping[{a_, b_}, {c_, d_}] := Or[a == c, a < c < b, c < a < d] Count[Flatten@Outer[overlapping, v1, v2, 1], True] More efficient algorithms are possible if you can guarantee the bricks in each list are non-overlapping and exhaustive. Bobby From: "Prince-Wright, Robert G SEPCO" <robert.prince-wright at shell.com> To: mathgroup at smc.vnet.net Can someone please help me recode this Module so it is less procedural and hopefully runs a lot faster. The Lists V1 and V2 represent two time series with 'bricks' laid out along them. The Bricks have varying length set by v[[i]][[1]] and v[[i]][[2]] and the idea is to count the number of times there is an overlap. I can only see the dumb procedural way of taking each brick and checking if it overlaps in time with another! Concurrence[v1_List, v2_List,nsim_]:=Module [ {k=1,c=0}, Do[ Do[ Which[ v1[[i]][[1]] == v2[[k]][[1]], c=c+1, v1[[i]][[1]] < v2[[k]][[1]] && v1[[i]][[2]] > v2[[k]][[1]], c=c+1, v1[[i]][[1]] > v2[[k]][[1]] && v1[[i]][[1]] < v2[[k]][[2]], c=c+1 ]; (*Write[ strm1, {v1[[i]][[1]],v2[[i]][[1]],c}];*) , {i,1,nsim} ], {k,1,nsim} ]; c ] I've have a PowerPoint illustration if this is unclear and can e-mail it. thanks Robert Prince-Wright