Currently, dice is a bit slower than it could be. It would be nice if dice used a binary search to speed up the search for which element the chosen point corresponds to.
Comment #1 by bearophile_hugs — 2013-11-24T16:52:57Z
(In reply to comment #0)
> Currently, dice is a bit slower than it could be. It would be nice if dice used
> a binary search to speed up the search for which element the chosen point
> corresponds to.
See Vose's Alias Method:
http://www.keithschwarz.com/darts-dice-coins/
But regarding dice speed see Issue 5849, so perhaps this is a dupe (or you can move your requests there).
Comment #3 by joseph.wakeling — 2013-11-30T02:07:50Z
(In reply to comment #2)
> Associated pull request:
> https://github.com/D-Programming-Language/phobos/pull/1716
Follow-up here based on feedback provided to Chris' pull request. We agreed that it wasn't an appropriate solution, simply because the cost of allocating (ouch!) and then filling (O(N)) an array containing a cumulative sum of the proportions, was actually worse than the (also O(N) but no allocation and no extra operations) traversing of the proportions that dice() currently does.
However, it occurs to me that it might be possible to offer an overload for dice() if it receives a SortedRange containing the cumulatively summed proportions. This could provide the best of all possible worlds as it might offer a reliable means to binary-search dice _without requiring any allocation at all_ (e.g. if your proportions are an iota(), or some other predictable range).