On 04/30/2015 04:35 PM, Cecil Westerhof wrote:
Op Thursday 30 Apr 2015 20:53 CEST schreef Dave Angel:
Finally, I did some testing on Jon Ribben's version. His was
substantially faster for smaller sets, and about the same for 10*7.
So it's likely it'll be slower than yours and mine for 10**8. But
the real reason I didn't like it was it produced a much larger set
of happy_numbers, which could clog memory a lot sooner. For 10**7
items, I had 3250 happy members, and 19630 unhappy. And Jon had
1418854 happy members.
My version has 1625 and 9814. I do not understand the difference.
My error. I had also written a version of the function that stored
strings instead of ints, and the counts of 3250/19630 was for sets that
had BOTH.
An exercise for the reader. Notice that in my brute force algorithm I
use no global sets. But I do use an internal list, which is apparently
unbounded. So it's feasible to run out of memory. The challenge is to
write a similar function that uses no lists, sets, or dicts, just an
algorithm that detects for an arbitrary sized number whether it's happy
or not. (It may not be very quick, but that's yet to be decided. I'm
already surprised that the present brute force function davea1() only
takes about twice as long as the fancy global caching schemes.
--
DaveA
--
https://mail.python.org/mailman/listinfo/python-list