On Aug 19, 11:34 pm, John Machin <sjmac...@lexicon.net> wrote:
> On Aug 20, 12:12 pm, Simon Forman <sajmik...@gmail.com> wrote:
>
> > On Aug 19, 8:17 pm, "Jan Kaliszewski" <z...@chopin.edu.pl> wrote:
> > > If you mean: to count non overlaping occurences of string A in B
> > > -- simply:
>
> > >    B.count(A)
>
> > You don't want to use count() in a case like this because it iterates
> > through B len(A) times, i.e. this algorithm is O(A x B).
>
> There's seems to be multiple confusion here. Jan was talking about
> counting non-overlapping occurrences of string A in [string] B. In
> that case B.count(A) is nowhere near O(A*B)... in fact in reasonable
> cases it is sub-linear i.e. O(B/A)
>
> Seehttp://svn.python.org/view/python/trunk/Objects/stringlib/fastsearch....
>
> And even a naive implementation of str.count() would not "iterate
> through B len(A) times".
>
> and list.count() can't be used on its own to solve Neal's problem; its
> arg is a single element so it would have to be wrapped in a loop: sum
> (B.count(a) for a in A) which would of course be O(A*B)

First, thanks for pointing out str.count().  I didn't know of it and I
didn't notice that that was what was being used in Jan's code. (It's
blindingly obvious-- now that you've pointed it out. :] )


Second, I was referring to this:

   dict((element, B.count(element)) for element in A)

not B.count(A). Sorry for not interspersing my comment better.

Regards,
~Simon
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to