No trees in the stdlib?
João Valverde
backup95 at netcabo.pt
Mon Jun 29 01:24:36 EDT 2009
João Valverde wrote:
> Paul Rubin wrote:
>> João Valverde <backup95 at netcabo.pt> writes:
>>
>>> Could you clarify what you mean by immutable? As in... not mutable? As
>>> in without supporting insertions and deletions?
>>
>> Correct.
>>
>>> That's has the same performance as using binary search on a sorted
>>> list. What's the point of using a tree for that?
>>>
>>
>> The idea is you can accomplish the equivalent of insertion or deletion
>> by allocating a new root, along with the path down to the place you
>> want to insert, i.e. O(log n) operations. So instead of mutating an
>> existing tree, you create a new tree that shares most of its structure
>> with the old tree, and switch over to using the new tree. This
>> trivially lets you maintain snapshots of old versions of the tree,
>> implement an "undo" operation, have a background thread do a complex
>> operation on a snapshot while the foreground thread does any number of
>> update-and-replace operations, etc.
>>
>>
>>
> Interesting, thanks. The concept is not difficult to understand but
> I'm not sure it would be preferable. A copy operation should have the
> same cost as a "snapshot", undo is kind of redundant and
> multithreading... don't see a compelling use that would justify it.
> Also the interface is a mapping so it'd be rather nice to emulate dict's.
>
> Have you considered how the syntax would work in Python by the way? This:
>
> new_tree = old_tree.insert(object)
>
Heh, that's a poor example for a mapping. But:
bst[key] = object
is even dicier for immutable structures no?
More information about the Python-list
mailing list