[R] Splitting Area under curve into equal portions

From: Nathan S. Watson-Haigh <nathan.watson-haigh_at_csiro.au>
Date: Thu, 26 Mar 2009 11:48:41 +1000


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I have some data generated as follows:

<code>
n <- 2000
work <- vector()
for(x in 1:n) {
  work[x] <- sum(1:(n-x+1))
}
plot(work)
</code>

What I want to do

- -----------------

I want to split work into a number of unequal chunks such that the sum of the values in each chunk is approximately equal.

The numbers in "work" are proportional to the amount of work to be performed for each value of x by a function I've written. i.e. For each value of x, there are work[x] * y calculations to be performed (where y is a constant).

I've written a parallel version of my function where I simply assign z number of x values to each slave. This is not ideal, since a slave that gets the 1:z smallest values of x will take longer to compute than the (n-z+1):n set of x values. For example, if I have 4 slaves available:

slave 1 processes x in 1:500
slave 2 processes x in 501:1000
slave 3 processes x in 1001:1500
slave 4 processes x in 1501:2000

This means the total work performed by each slave is:

slave 1 sum(work[1:500])     = 771708500
slave 2 sum(work[501:1000])  = 396458500
slave 3 sum(work[1001:1500]) = 146208500
slave 4 sum(work[1501:2000]) = 20958500

Manually plitting work into chunks where the sum of the values for the chunks is approximately equal, I get the following:

sum(work[1:184])
[1] 335533384
> sum(work[185:415])

[1] 334897871
> sum(work[416:745])

[1] 334672085
> sum(work[746:2000])

[1] 330230660

I need to be able to do this automatically for any value of n and I think I should be able to do this by calculating the area under the curve and slicing it into equally sized regions, but don't really know how to get there from what I've said above!

Cheers,
Nathan

Tel: +61 (0)7 3214 2922
Fax: +61 (0)7 3214 2900
Web: http://www.csiro.au/people/Nathan.Watson-Haigh.html
- --------------------------------------------------------

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAknK3vkACgkQ9gTv6QYzVL68TACeI0gXqUXRr+W64iZaGe7olvov b9IAnjVENA6rn0r5QFv+Pu/poWjydEC7
=dgnE
-----END PGP SIGNATURE-----



R-help_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Thu 26 Mar 2009 - 00:53:44 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 26 Mar 2009 - 05:30:32 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive