
The Britney Spears Problem - edw519
http://www.americanscientist.org/issues/id.3822,y.0,no.,content.true,page.1,css.print/issue.aspx
======
Sam_Odio
> ... calculating the average (or arithmetic mean) of a stream's integers
> takes three registers and three operations per integer. One register counts
> the elements, another records their sum, and the third register holds the
> value of the average, calculated as the quotient of the sum and the count.

Here's an easy brain teaser: do the above using only two registers.

~~~
ramchip
How about a special running average: keep the count in one register and the
average in the other one. Let's say N is the current count and av the average.
The algorithm is in C-style notation: void addElement( int val ) { ++N; av =
((N - 1) * av / N) + val / N; }

I have used a similar trick (with a fixed N) to implement a cheap running
average for an image acquisition software and it works quite well, but of
course if N is very large val / N becomes negligible.

~~~
hack_edu
You guys are so goddamn geeky! <3

------
jlhamilton
I posted this a while back, but it didn't get many votes.

<http://news.ycombinator.com/item?id=243270>

