hash and __eq__

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sun May 31 04:04:30 EDT 2009


On Sun, 31 May 2009 07:24:09 +0100, Arnaud Delobelle wrote:

> AFAIK, 'complexity' means 'worst case complexity' unless otherwise
> stated.

No, it means "average or typical case" unless otherwise specified. 
Consult almost any comp sci text book and you'll see hash tables with 
chaining (like Python dicts) described as O(1) rather than O(N), 
Quicksort as O(N log N) instead of O(N**2), and similar. If the default 
was "worst case unless otherwise specified", then Quicksort would be 
called "Slower than Bubblesort Sort".

(Both are O(N**2), but Quicksort does more work.)

Here's a quote on-line:

"You should be clear about which cases big-oh notation describes. By 
default it usually refers to the average case, using random data. 
However, the characteristics for best, worst, and average cases can be 
very different..."

http://leepoint.net/notes-java/algorithms/big-oh/bigoh.html


It is simply misleading to describe dicts as O(N) without the 
qualification "if the data is chosen maliciously, or otherwise by an 
incredible fluke". And even if it isn't, Piet explicitly said he was 
talking about the average behaviour, not worst.



-- 
Steven



More information about the Python-list mailing list