diff options
author | Raymond Hettinger <rhettinger@users.noreply.github.com> | 2018-12-04 08:13:38 (GMT) |
---|---|---|
committer | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2018-12-04 08:13:38 (GMT) |
commit | 7fc633f5a56d9e672cd24133e2e1376347abac6c (patch) | |
tree | cb7eb801ff44d316cecf7e2d139df16773bba0d4 | |
parent | 17473347942353946fe455f797a2197cb89c1090 (diff) | |
download | cpython-7fc633f5a56d9e672cd24133e2e1376347abac6c.zip cpython-7fc633f5a56d9e672cd24133e2e1376347abac6c.tar.gz cpython-7fc633f5a56d9e672cd24133e2e1376347abac6c.tar.bz2 |
Add comments regarding speed/space/entropy trade-offs (GH-10885)
-rw-r--r-- | Lib/random.py | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/Lib/random.py b/Lib/random.py index 4b51b66..a7a8607 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -333,6 +333,19 @@ class Random(_random.Random): # preferred since the list takes less space than the # set and it doesn't suffer from frequent reselections. + # The number of calls to _randbelow() is kept at or near k, the + # theoretical minimum. This is important because running time + # is dominated by _randbelow() and because it extracts the + # least entropy from the underlying random number generators. + + # Memory requirements are kept to the smaller of a k-length + # set or an n-length list. + + # There are other sampling algorithms that do not require + # auxiliary memory, but they were rejected because they made + # too many calls to _randbelow(), making them slower and + # causing them to eat more entropy than necessary. + if isinstance(population, _Set): population = tuple(population) if not isinstance(population, _Sequence): |