Stefan Pochmann <stefan.pochm...@gmail.com> added the comment:

I see you mentioned that PyObject_RichCompareBool(..., Py_EQ) might be faster 
for example because it checks identity. Why not do an identity check before the 
ms->tuple_elem_compare calls? Too expensive and rarely successful?
 
> Extending the idea to positions beyond the first is dubious on those grounds: 
> if the first tuple positions in fact often match, then the optimization has 
> already backfired. Time to admit defeat then, not double down on failed 
> arrogance ;-)
 
I don't see that. First and second positions are quite different.

For example I sorted a million tuples where both first and second element are 
randomly chosen from a population of 10,000. So their amounts of duplication 
were the same. But these are the statistics from sorting:
- First position:   18,603,981 equality comparisons, 29.87% equal
- Second position:   5,556,203 equality comparisons,  0.09% equal
Many first positions matched, almost no second positions matched.

One more idea: What do you think of sorting lists of tuples (or tuple keys) in 
two stages?
1) Sort the list only by first position (comparing with only one 
tuple_elem_compare).
2) Identify equal-first-position-runs (with tuple_elem_compare) and sort each 
run independently (comparing only positions 1+).
Some experiments I did with this looked good, not sure if too off-topic to post 
here...

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue45530>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to