Performance: sets vs dicts.

Terry Reedy tjreedy at udel.edu
Thu Sep 2 23:55:59 CEST 2010


On 9/1/2010 8:11 PM, John Bokma wrote:
> Terry Reedy<tjreedy at udel.edu>  writes:
>
>> On 9/1/2010 5:40 PM, John Bokma wrote:
>
> [..]
>
>> Yes, I switched, because 'constant time' is a comprehensible claim
>> that can be refuted and because that is how some will interpret O(1)
>> (see below for proof;-).
>
> You make it now sound as if this interpretation is not correct or out of
> place.

Saying that an interpretation is comprehensible and common is hardly a 
putdown ;-). It simply is not unique. I also said that the other 
interpretation is not coherent for size-limited problems. However, if 
you mean 'constant', whatever you mean by that, why not say so?

Here is the technical definition given in
https://secure.wikimedia.org/wikipedia/en/wiki/Big_O_notation
I assure you that it is the standard one invented by a mathematiciam 
over a century ago and used by mathematicians ever since. It was 
popularized in computer science by Donald Knuth in 1976 and used in The 
Art of Computer Programming. It is related to the definition of limits.
'''
Formal definition

Let f(x) and g(x) be two functions defined on some subset of the real 
numbers. One writes

     f(x)=O(g(x))\mbox{ as }x\to\infty\,

if and only if, for sufficiently large values of x, f(x) is at most a 
constant multiplied by g(x) in absolute value. That is, f(x) = O(g(x)) 
if and only if there exists a positive real number M and a real number 
x0 such that

     |f(x)| \le \; M |g(x)|\mbox{ for all }x>x_0.
'''
For g(x) == 1, this reduces to |f(x)| < M for some M (and large x), 
which is to say, f(x) is bounded (at least for large x).

Hmmm. By that definition, 1/x is O(1). Let x0 be anything but 0 and M = 
1/x0. Some might find that disturbing. But it is the nature of the 
notation, as with limit notation, that is says *nothing* about the 
behavior of f for small x.

 > People who have bothered to read ItA will use O(1) and constant
> time interchangeably while talking of the order of growth of the running
> time algorithms

People who have bothered to read the Bidle will use terms the way they 
are used in the Bible. So what? In other words, I do not regard ItA as 
scripture in the way you seem to. (I presume you mean the Cormen, etal 
book. I partially read a library copy over 20 years ago but never 
bothered to buy a copy. I see it is now into its third edition.) If they 
disagree with Knuth and most others (which I would not claim without 
seeing their actual text) then so much the worse for them.

 > and most of those are aware that 'big oh' hides a
> constant, and that in the real world a O(log n) algorithm can outperform
> an O(1) algorithm for small values of n.

Right. And if 'small values of n' include all possible values, then 
rejecting a particular O(log n) algorithm as 'unacceptable' relative to 
all O(1) algorithms is pretty absurd.

>>> Uhm, O(1) /is/ constant time, see page 45 of Introduction to Algorithms,
>>> 2nd edition.

Given that the Wikipedia article references that section also, I wonder 
if it really disagrees with the definition above.

-- 
Terry Jan Reedy




More information about the Python-list mailing list