On Jan 27, 2010, at 3:55 PM, Maciej Fijalkowski wrote:

>> 
>> FWIW, deque indexing for small deques is already O(1)
>> and somewhat fast.  You only get O(n) degradation
>> (with a small contant factor) on large deques.
>> 
> 
> Hi.
> 
> For small dequeues (smaller than a constant), you have to have O(1)
> operations, by definition :-)
> 

LOL, of course that's true.
What I meant though is that for deques that fit in a single block, the lookup 
is direct (no searching).

For multi-block deques, the code traverses links (one link for every 62 
elements).
So the indexing time would be i//62 + 1.  However , if i is more than half-way 
through the deque, the search starts from the other end.  So the indexing time 
is:  min(i, len(d)-i)//2 + 1.

It's still O(n) for large deques, but the constant factor isn't large and it is 
fast for small deques, and always O(1) for accesses near either end (i.e.  d[0] 
and d[-1] are direct lookups with no searching) -- those cases are typical.

What use case requires a large deque, growing on end, shrinking on the other, 
and needs O(1) random access to elements in the middle?  Stored indicies lose 
their meaning whenever the deque mutates.


Raymond
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to