[OT] Algorithm question
Ola Fosheim Grøstad via Digitalmars-d
digitalmars-d at puremagic.com
Mon May 1 02:01:33 PDT 2017
On Monday, 1 May 2017 at 08:42:05 UTC, John Colvin wrote:
> I like this one (warning, just thought of, untested):
>
> auto r = ... /* elements of A */
> auto nRemaining = r.length;
> while (nRemaining) {
> auto i = uniform(0, nRemaining);
> if (P(r[i])) return r[i];
> else swap(r[i], r[--nRemaining]);
> }
Yes, this is the standard text-book way of doing it, still O(N)
of course. The other standard-text-book way is to generate an
array of indexes and mutate that instead, still O(N). If you
cache in a heap you get O(N log N).
Anyway, this kind of worst case analysis doesn't really help. And
neither does average case, which will be O(1) assuming 50% match
P.
So you need is to specify what kind of average case analysis you
want. For instance expressed as f(N,S) where N is the number of
elements and S is the number of elements that satisfies P.
More information about the Digitalmars-d
mailing list