diff options
author | Raymond Hettinger <python@rcn.com> | 2017-02-04 10:43:42 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2017-02-04 10:43:42 (GMT) |
commit | 5cd87a8d61246b0a6233bfb8503d4718b693cef0 (patch) | |
tree | 0f6eebc9a49de0acc82251dcc791d0ea9bcc98cf /Objects | |
parent | b451f91786a308c4a16f3fd66eae59e2528e3777 (diff) | |
download | cpython-5cd87a8d61246b0a6233bfb8503d4718b693cef0.zip cpython-5cd87a8d61246b0a6233bfb8503d4718b693cef0.tar.gz cpython-5cd87a8d61246b0a6233bfb8503d4718b693cef0.tar.bz2 |
Reduce load factor (from 66% to 60%) to improve effectiveness of linear probing.
Decreased density gives better collision statistics (average of 2.5 probes in a
full table versus 3.0 previously) and fewer occurences of starting a second
possibly overlapping sequence of 10 linear probes. Makes resizes a little more
frequent but each with less work (fewer insertions and fewer collisions).
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/setobject.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/Objects/setobject.c b/Objects/setobject.c index c72c0fa..4f04f49 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -234,7 +234,7 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash) so->used++; entry->key = key; entry->hash = hash; - if ((size_t)so->fill*3 < mask*2) + if ((size_t)so->fill*5 < mask*3) return 0; return set_table_resize(so, so->used); @@ -642,7 +642,7 @@ set_merge(PySetObject *so, PyObject *otherset) * incrementally resizing as we insert new keys. Expect * that there will be no (or few) overlapping keys. */ - if ((so->fill + other->used)*3 >= so->mask*2) { + if ((so->fill + other->used)*5 >= so->mask*3) { if (set_table_resize(so, so->used + other->used) != 0) return -1; } @@ -986,7 +986,7 @@ set_update_internal(PySetObject *so, PyObject *other) */ if (dictsize < 0) return -1; - if ((so->fill + dictsize)*3 >= so->mask*2) { + if ((so->fill + dictsize)*5 >= so->mask*3) { if (set_table_resize(so, so->used + dictsize) != 0) return -1; } |