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

Reply via email to